
Joomla 6.1.3 - 높음 - 원격 - ACL - 메뉴 항목 API 잔여물
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · joomla-menu-items-api
분류: 권한 잔여 도달 범위: 원격
Joomla CMS 6.1.3 (0f2d4de) - Open Source Matters
메뉴 항목에 대한 관리자 UI는 com_menus.menu.{id}를 확인하고 menutype == main을 거부합니다. api/components/com_menus/src/Controller/ItemsController.php에는 allowAdd / allowEdit가 없으므로, ApiController는 com_menus에 대한 core.manage와 core.create / core.edit만 요구합니다.
하나의 메뉴를 관리할 수 있는 토큰 사용자는 UI에서 거부된 메뉴, 보호된 관리자 main 메뉴를 포함하여 /api/index.php/v1/menus/administrator/items로 POST할 수 있습니다.
| ID | 아직 CVE 없음 |
| 분류 | 권한 잔여 / 인가 우회 |
| 도달 범위 | 원격 (core.login.api가 있는 API 토큰) |
| CWE | CWE-863 |
| CVSS | 높음: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| 제품 | Joomla CMS |
| 영향받는 버전 | 6.1.3 (0f2d4de4729eb951e0878fec98c7990da07915b2) |
| 인증 | core.login.api + com_menus에 대한 core.manage + core.create/core.edit를 가진 원격 API 사용자, 슈퍼 사용자 아님. 기본 core.login.api는 슈퍼 사용자 전용입니다. |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1 전용 |
메뉴 A에만 항목을 생성할 수 있는 토큰 사용자. 해당 권한이 이미 없으면 확장을 설치할 수 없습니다. 이 잔여 권한으로 슈퍼 사용자가 되지는 않습니다.
| 권한 | 메서드 / 경로 | 종류 | 랩 입증 또는 추론 |
|---|---|---|---|
| 거부된 메뉴에 항목 생성 | B의 menutype으로 POST /api/index.php/v1/menus/administrator/items | 무결성 | 랩 입증. HTTP 200, staffmenu의 항목 102, 제목 poc-JOOMLA-MENU-ITEMS-API-WITNESS |
보호된 관리자 main 메뉴에 URL 심기 | menutype=main으로 동일한 POST | 무결성 | 랩 입증 HTTP 200. UI allowEdit는 main에 대해 false 반환 |
| 직원을 유사 로그인으로 유도하거나 실제 관리자 항목 숨기기 | 관리자 메뉴에 게시된 URL 항목 | 무결성 / 정찰 | 쓰기에서 추론. 랩에서 https://example.invalid/ 심음 |
| 소유하지 않은 메뉴의 항목 편집 또는 삭제 | API PATCH / DELETE는 동일한 누락된 allow* 사용 | 무결성 | 추론. 랩에서 생성 실행 |
| 확장 설치 또는 슈퍼 사용자 되기 | 다른 ACL 필요 | 해당 없음 | 차단됨. 관리자는 슈퍼 사용자 아님 |
이 핀에서 차단됨: 동일 사용자의 staffmenu에 대한 UI 추가/저장 (not permitted). labmenu에 대한 UI 추가는 여전히 작동합니다. 6.1.1의 Groups API core.admin 게이트는 변경되지 않았습니다.
2026 JSST 웨이브 이후 6.1.3을 핀했습니다. 관리자 ItemController는 이미 올바르게 처리합니다:
return $user->authorise('core.create', 'com_menus.menu.' . $menutypeID);
if ($item->menutype == 'main') {
return false;
}
return $user->authorise('core.edit', 'com_menus.menu.' . (int) $menutypeID);
API 항목 컨트롤러는 allowAdd / allowEdit를 재정의하지 않습니다. 기본 ApiController는 컴포넌트 core.manage와 core.create / core.edit만 확인합니다. 모델 canSave 경로는 컴포넌트 core.edit만 확인합니다. 일괄 복사/이동은 이미 메뉴 자산을 확인합니다.
이미 기록된 잘못된 방향: UI HTTP 200을 허용으로 읽기 (본문은 "not permitted"); UI에서 com_menus에 대한 core.manage를 충분하다고 간주 (UI는 여전히 com_menus.menu.{id}를 기준으로 함); core.login.api가 없는 기본 관리자. 연극: 리버스 셸. 오라클은 staffmenu와 main에 대한 API 200과 B에 대한 UI 거부입니다.
동일 핀 잔여: levels API, media override, articles catid.
python3 joomla-menu-items-api-Abraxas-Labs.py
또는
cd lab
./run.sh
오직 http://127.0.0.1:19530만 대상으로 합니다. 이미지 joomla:6.1.3-php8.3-apache.
SUCCESS joomla-menu-items-api api-b-http=200 item-id=102 menutype=staffmenu api-main-http=200 ui-add-b=200 ui-save-b=200 JOOMLA-MENU-ITEMS-API-WITNESS
ui-add-b / ui-save-b는 HTTP 200입니다; B의 거부는 UI "not permitted" 본문이며 403 상태가 아닙니다.
ItemController::allowAdd / allowEdit (및 delete)를 main 차단을 포함하여 API 컨트롤러에 복사하세요. canSave에서 메뉴 유형 자산을 동일한 방식으로 확인하세요.
0f2d4de4729eb951e0878fec98c7990da07915b2)ItemsController.phpItemController.phpGNU Affero GPL v3.0. LICENSE 참조. 루프백 랩 전용. 보증 없음.