FlawOpen

flawopen.com/AI Security/plugin4shell-ai-agent-plugin-sha-pin-bypass

● CWE-345 · उच्च
सुरक्षा अनुसंधान · FlawOpen

Plugin4Shell: प्लगइन SHA पिन बायपास

चार AI एजेंट प्लगइन इंस्टॉलर ने Git revision तय की, पर checkout हुए commit की जाँच नहीं की। Plugin4Shell ने यह कमी उजागर की; अंतिम SHA सत्यापित करें।[1]

💡 आसान भाषा में (ELI5)

पुस्तकालय किसी पुस्तक के खास संस्करण को उसके विशिष्ट कैटलॉग नंबर से रखता है। कर्मचारी वही नंबर माँगता है, लेकिन शेल्फ पर उसी पाठ वाला लेबल देखकर दूसरी पुस्तक दे देता है। SHA पिन कैटलॉग नंबर जैसा है; प्लगइन पर भरोसा करने या उसे चलाने से पहले इंस्टॉलर को वास्तविक checkout commit जाँचना चाहिए।[1]

इस पेज के मुख्य शब्द

Commit SHA
एक hash जो किसी खास Git commit object की पहचान करता है। सुरक्षित pinning में resolved checkout की तुलना इसी मान से होती है।[1], [2]
Git ref अस्पष्टता
Git object ID और branch जैसे नामों को revision expression के रूप में स्वीकार करता है। कुछ स्थितियों में commit ID जैसा दिखने वाला नाम ref के रूप में resolve हो सकता है।[1]
प्लगइन marketplace
एजेंट एक्सटेंशन बाँटने और समीक्षित revision दर्ज करने वाला कैटलॉग। पिन लागू कराने की जिम्मेदारी इंस्टॉल करने वाले क्लाइंट की भी है।[1]
CWE-345
डेटा की प्रामाणिकता का अपर्याप्त सत्यापन: सिस्टम डेटा का उपयोग करता है, पर यह पर्याप्त रूप से नहीं जाँचता कि वह अपेक्षित असली मान है।[5]

फ्रेमवर्क मैपिंग

  • इस गाइड में बताई गई कमजोरी के लिए CWE संदर्भ: CWE-345

हमले का चरण-दर-चरण प्रवाह

चरण 1

मार्केटप्लेस समीक्षित commit दर्ज करता है

प्लगइन प्रविष्टि एक repository और एक खास commit SHA बताती है जिसे इंस्टॉलर से उपयोग करने की अपेक्षा होती है।[1]

चरण 2

repository नियंत्रक refs बदल सकता है

AIR Security के अनुसार, ऐसे नामों की अनुमति देने वाले Git host पर repository नियंत्रक अनुरोधित SHA के नाम वाली default branch बना सकता है। Gemini CLI के लिए रिपोर्ट अलग FETCH_HEAD ref-resolution रास्ता बताती है।[1]

चरण 3

इंस्टॉलर HEAD जाँचे बिना checkout करता है

Codex के सुधार से पहले अनुरोधित SHA को <code>git checkout</code> में दिया जाता था और Git की सफलता को पिन सही होने का प्रमाण मान लिया जाता था।[1], [2]

चरण 4

क्लाइंट प्राप्त tree स्वीकार या अस्वीकार करता है

Codex का सुधार checkout के बाद <code>git rev-parse HEAD</code> पढ़ता है और mismatch पर रुक जाता है। समान जाँच न हो तो बदला हुआ प्लगइन कोड एजेंट उपयोगकर्ता के अधिकारों से इंस्टॉल होकर चल सकता है।[2], [1]

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

कमजोर रास्ते ने नाम का सफल resolution ही object identity का प्रमाण मान लिया। patch checkout के बाद बने HEAD की marketplace pin से तुलना करता है और दूसरे commit को materialize करने से मना करता है। यह Codex patch का उदाहरण है; बाकी उत्पादों के installer अलग थे, इसलिए उनकी patch को समान नहीं मानना चाहिए।[2], [6]

कमज़ोर कार्यान्वयन
// OpenAI Codex PR #34644 से पहले का रूप
if let Some(target) = sha.or(ref_name) {
    run_git(&["checkout", target], Some(destination))?;
}
// सफल checkout को SHA मेल खाने का प्रमाण माना गया।
सुरक्षित और सुदृढ़ फ़िक्स
// Codex सुधार: केवल अनुरोधित argument नहीं, resolve हुआ commit भी जाँचें
if let Some(sha) = sha {
    run_git(&["checkout", sha], Some(destination))?;
    let checked_out_sha =
        run_git_output(&["rev-parse", "HEAD"], Some(destination))?;
    if !checked_out_sha.eq_ignore_ascii_case(sha) {
        return Err(format!(
            "checked out Git SHA {checked_out_sha} does not match requested SHA {sha}"
        ));
    }
} else if let Some(ref_name) = ref_name {
    run_git(&["checkout", ref_name], Some(destination))?;
}

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत

← AI Security Directory →