FlawOpen

flawopen.com/Incidents/bricksforge-pro-forms-upload-metadata-october-2026

● Bricksforge WordPress plugin · CVE-2026-85097 · 2026-10-07 · CVSS 9.8 · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-85097: Bricksforge Pro Forms अपलोड दोष

CVE-2026-85097 में Bricksforge Pro Forms के अस्थायी फ़ाइल के सत्यापित कंटेंट और क्लाइंट-नियंत्रित गंतव्य मेटाडेटा के बीच की असंगति का बिना प्रमाणीकरण वाले अनुरोधों से दुरुपयोग संभव था। Patchstack ने शोषण के प्रयासों की सूचना दी है; प्लगइन अपडेट करें और उजागर साइटों की जाँच करें।[1], [2], [3], [4], [5]

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

एक डाकघर की कल्पना करें जो पैकेट में सुरक्षित तस्वीर की जाँच करता है, फिर भेजने वाले को लेबल बदलने देता है, जबकि आगे का कार्यालय कुछ लेबल को प्रोग्राम की तरह खोलता है। Bricksforge ने अस्थायी अपलोड की जाँच की, लेकिन बाद में फ़ॉर्म जमा करते समय दूसरा गंतव्य नाम दिया जा सकता था। बचाव यह है कि फ़ाइल की पहचान और उसका संग्रह-स्थान पूरी प्रक्रिया में सर्वर तय करे।[3], [2]

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

अस्थायी अपलोड
फ़ॉर्म सबमिशन पूरा होने से पहले कुछ समय के लिए रखी गई फ़ाइल। इस चरण की जाँच बाद में क्लाइंट द्वारा भेजे गए मेटाडेटा को भरोसेमंद नहीं बनाती।[2], [3]
CWE-434
खतरनाक प्रकार की फ़ाइल का अप्रतिबंधित अपलोड: सिस्टम ऐसी फ़ाइल स्वीकार करता है जिसकी खतरनाक व्याख्या या निष्पादन हो सकता है।[1], [2]
मेटाडेटा विश्वास सीमा
वह बिंदु जहाँ एप्लिकेशन तय करता है कि नाम, URL, MIME प्रकार या पथ सर्वर के भरोसेमंद रिकॉर्ड से आया है या अविश्वसनीय क्लाइंट से।[2], [3]
CVE स्कोर और शोषण स्थिति
Wordfence CNA का CVE रिकॉर्ड CVSS 3.1 को 9.8 बताता है और CISA enrichment में शोषण नहीं दर्शाया गया। Patchstack 10.0 बताता है और 7 अक्टूबर 2026 को पहली बार देखी गई टेलीमेट्री की रिपोर्ट करता है। ये अलग-अलग स्रोतों के दावे हैं; कोई भी CISA KEV में शामिल होने की पुष्टि नहीं करता।[1], [2], [3], [4]
उदाहरण कोड
नीचे का PHP तुलना उदाहरण सत्यापन सीमा को सामान्य रूप से दिखाता है। यह Bricksforge का स्रोत कोड या उसके पैच का पुनर्निर्माण नहीं है; उद्धृत changelog ये विवरण प्रकाशित नहीं करता।[2], [3], [5]

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

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

रिपोर्ट की गई संस्करण स्थिति और संचालक की कार्रवाई

साक्ष्य स्रोतइसमें क्या बताया गया हैरक्षा संबंधी कार्रवाई
Wordfence CNA / CVE रिकॉर्डबिना प्रमाणीकरण मनमानी फ़ाइल अपलोड होने का वर्णन करता है; दर्ज प्रभावित सीमा 3.1.8.9 तक है।इसे CNA द्वारा दर्ज दायरे के रूप में लें, किसी तैनात साइट के सुरक्षित होने का प्रमाण न मानें।
Patchstack (8 अक्तूबर 2026)7 अक्तूबर को पहली बार देखे गए शोषण प्रयासों की रिपोर्ट करता है और 3.1.8.10 को सुधरा हुआ संस्करण बताता है।इसे Patchstack द्वारा बताई गई सुधार सीमा मानें; हर साइट पर वास्तव में इंस्टॉल प्लगइन संस्करण जाँचें।
Bricksforge का सार्वजनिक बदलाव लॉगसंस्करण 4.0.1 में Pro Forms अपलोड का सुरक्षा सुधार सूचीबद्ध है, लेकिन 3.1.8.10 की सीमा नहीं बताई गई।केवल बदलाव लॉग से यह न मानें कि 4.0.1 पहला सुधरा संस्करण है या कोई खास 3.x संस्करण सुरक्षित है।
सार्वजनिक रूप से पहुँच योग्य या संदिग्ध रूप से प्रभावित साइटस्रोत शोषण के प्रयास बताते हैं; वे यह साबित नहीं करते कि हर लक्षित साइट प्रभावित हुई।वर्तमान में समर्थित संस्करण पर अपडेट करें; रिकवरी पूरी घोषित करने से पहले अपलोड और वेब-सर्वर लॉग देखें तथा अनपेक्षित फ़ाइलों की जाँच करें।

घटना का समयक्रम (Timeline)

2026-10-07

Wordfence अपने advisory की सार्वजनिक प्रकाशन तिथि 7 अक्टूबर बताता है। Patchstack के अनुसार उसकी telemetry ने उसी दिन 21:47 UTC पर पहली कोशिशें देखीं; advisory का प्रकाशन और telemetry का अवलोकन अलग घटनाएँ हैं।[2], [3]

2026-10-08

CVE रिकॉर्ड में datePublished 8 अक्टूबर है, जो Wordfence की 7 अक्टूबर सार्वजनिक-प्रकाशन तिथि से एक दिन बाद है। Patchstack की campaign report भी 8 अक्टूबर को प्रकाशित बताई गई है; ये अलग रिकॉर्ड और प्रकाशनों की तिथियाँ हैं।[1], [2], [3]

2026-10-08

Patchstack का 8 अक्टूबर का विश्लेषण validation mismatch और देखी गई कोशिशों का वर्णन करता है तथा 3.1.8.10 को patched बताता है। Bricksforge changelog अलग से 4.0.1 में Pro Forms upload security fix सूचीबद्ध करता है, पर 3.x का सटीक fixed संस्करण स्थापित नहीं करता।[3], [4], [5]

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

चरण 1

अस्थायी फ़ाइल शुरुआती जाँच पार करती है

CNA पहले हुए अस्थायी अपलोड का वर्णन करता है जो MIME सत्यापन पार कर गया। इससे बाद में फ़ाइल नाम या गंतव्य मनमाने ढंग से बदलने की अनुमति नहीं मिलती।[2], [1]

चरण 2

फ़ॉर्म सबमिशन अलग मेटाडेटा देता है

Patchstack बताता है कि बाद की प्रक्रिया क्लाइंट द्वारा भेजे गए temporaryFileUploads मेटाडेटा पर भरोसा करती थी; उसका URL पहले से सत्यापित फ़ाइल से अलग हो सकता था। दोष यह है कि सत्यापित कंटेंट और असत्यापित गंतव्य को अलग-अलग भरोसे का स्तर मिला।[2], [3]

चरण 3

फ़ाइल खतरनाक नाम से रखी जाती है

यदि सर्वर अपलोड पूरा करते समय क्लाइंट-नियंत्रित गंतव्य इस्तेमाल करता है और वहाँ निष्पादन सक्षम है, तो खतरनाक एक्सटेंशन सर्वर पर फ़ाइल की व्याख्या करा सकता है। यह उच्च-स्तरीय विवरण है; अनुरोध प्रारूप या पेलोड की ज़रूरत नहीं।[2], [3]

चरण 4

उजागर साइट पर सर्वर समझौता संभव है

CNA कहता है कि समस्या मनमाना PHP निष्पादन संभव कर सकती है। Patchstack प्रयासों की रिपोर्ट करता है और अपडेट की सलाह देता है। इससे हर लक्षित साइट का समझौता या हमलावर की पहचान सिद्ध नहीं होती।[2], [3]

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

यह सामान्य उदाहरण सर्वर-नियंत्रित अपलोड पहचान, उपयोगकर्ता के अनुसार खोज, कंटेंट प्रकार की दोबारा जाँच, बनाए गए फ़ाइल नाम और निजी संग्रह दिखाता है। यह Bricksforge का कोड या उसका वास्तविक पैच नहीं है। उत्पादन कोड में आकार सीमा, सुरक्षित अनुमतियाँ, परमाणु स्थिति-परिवर्तन और संदर्भ के अनुसार फ़ाइल प्रदान करना भी अनिवार्य है; प्रभावित साइटें Bricksforge के समर्थित पैच संस्करण पर अपडेट करें।[2], [3]

कमज़ोर कार्यान्वयन
function finalize_upload( array $item, string $stagedPath, string $uploadDir ): string {
    // पहले MIME जाँच होने के बाद अंतिम नाम client metadata तय करता है।
    $name = basename( (string) parse_url( $item['file']['url'], PHP_URL_PATH ) );
    $destination = $uploadDir . DIRECTORY_SEPARATOR . $name;
    if ( ! rename( $stagedPath, $destination ) ) {
        throw new RuntimeException( 'Could not finalize upload' );
    }
    return $destination;
}
सुरक्षित और सुदृढ़ फ़िक्स
function finalize_upload( string $uploadId, UploadRegistry $registry, string $privateDir ): string {
    // स्वामी और path को server-side record से लें, client URL से कभी नहीं।
    $upload = $registry->findPendingForCurrentUser( $uploadId );
    if ( $upload === null || ! is_file( $upload->path ) ) {
        throw new RuntimeException( 'Unknown pending upload' );
    }
    $types = [ 'image/jpeg' => 'jpg', 'image/png' => 'png' ];
    $mime = ( new finfo( FILEINFO_MIME_TYPE ) )->file( $upload->path );
    if ( ! isset( $types[ $mime ] ) ) {
        throw new RuntimeException( 'Unsupported file type' );
    }
    $destination = $privateDir . DIRECTORY_SEPARATOR . bin2hex( random_bytes( 16 ) ) . '.' . $types[ $mime ];
    if ( ! rename( $upload->path, $destination ) ) {
        throw new RuntimeException( 'Could not finalize upload' );
    }
    $registry->markConsumed( $uploadId );
    return $destination;
}

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

स्रोत