flawopen.com/AI Security/plugin4shell-ai-agent-plugin-sha-pin-bypass
Plugin4Shell: प्लगइन SHA पिन बायपास
चार AI एजेंट प्लगइन इंस्टॉलर ने Git revision तय की, पर checkout हुए commit की जाँच नहीं की। Plugin4Shell ने यह कमी उजागर की; अंतिम SHA सत्यापित करें।[1]
पुस्तकालय किसी पुस्तक के खास संस्करण को उसके विशिष्ट कैटलॉग नंबर से रखता है। कर्मचारी वही नंबर माँगता है, लेकिन शेल्फ पर उसी पाठ वाला लेबल देखकर दूसरी पुस्तक दे देता है। 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
हमले का चरण-दर-चरण प्रवाह
मार्केटप्लेस समीक्षित commit दर्ज करता है
प्लगइन प्रविष्टि एक repository और एक खास commit SHA बताती है जिसे इंस्टॉलर से उपयोग करने की अपेक्षा होती है।[1]
repository नियंत्रक refs बदल सकता है
AIR Security के अनुसार, ऐसे नामों की अनुमति देने वाले Git host पर repository नियंत्रक अनुरोधित SHA के नाम वाली default branch बना सकता है। Gemini CLI के लिए रिपोर्ट अलग FETCH_HEAD ref-resolution रास्ता बताती है।[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))?;
}
इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट
- ✓हर SHA-pinned checkout के बाद वास्तविक materialized commit (जैसे <code>git rev-parse HEAD</code>) resolve करें और प्लगइन फ़ाइलें लोड करने से पहले अनुरोधित pin से सटीक तुलना करें।[2], [6]
- ✓FlawOpen की कार्यान्वयन सिफारिश: Mismatch, HEAD न होने, command error या अनपेक्षित revision format पर fail closed करें; branch नाम पर fallback न करें।[2]
- ✓ऐसे अस्थायी local repository से installer जाँचें जहाँ default branch का नाम किसी दूसरे commit के SHA से टकराता हो; सुनिश्चित करें कि installation अस्वीकार हो और कोई plugin code load न हो।[6]
- ✓FlawOpen की कार्यान्वयन सिफारिश: Types और control flow में ref-name install तथा immutable SHA pin अलग रखें; सत्यापित commit को installation metadata में दर्ज करें।[1]
- ✓प्रभावित agent versions और marketplace Git hosts की सूची बनाएँ। GitHub SHA-जैसे branch नाम रोकता है, पर यह host-विशिष्ट नियम अन्य समर्थित hosts या Gemini के बताए FETCH_HEAD रास्ते को नहीं बचाता।[1], [4]
- ✓उद्धृत AIR disclosure के अनुसार Codex में 0.146.0 और Claude Code में 2.1.179 में सुधार हुआ, लेकिन प्रभावित versions की पूरी सीमा नहीं दी गई है। Copilot और Gemini CLI के status या कार्रवाई की सलाह देने से पहले नवीन vendor guidance जाँचें।[1], [3], [7]
- ✓Codex regression test
materialize_git_source_rejects_sha_that_resolves_to_hostile_default_branchबनाए रखें; यह temporary local repository बनाता है और plugin source materialize होने से पहले mismatched HEAD अस्वीकार होने की पुष्टि करता है।[6]
स्रोत
- AIR Security: Plugin4Shell disclosure और vendors की समन्वित स्थिति
- OpenAI Codex PR #34644: Git plugin SHA checkout का सत्यापन
- OpenAI Codex 0.146.0 release
- The Hacker News: स्वतंत्र रिपोर्ट और host-विशिष्ट सीमाएँ
- MITRE CWE-345: डेटा प्रामाणिकता का अपर्याप्त सत्यापन
- Codex regression test: reject SHA resolving to hostile default branch
- Anthropic Claude Code v2.1.179 रिलीज़