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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-47103-python-statemachine-rce — Python StateMachine 3.0.0 < 3.2.0에서 안전하지 않은 SCXML <data expr> 평가 및 Python eval() 주입을 통한 RCE | Kitploit
도구/GitHubGitHub/saiteja-erukude/cve-2026-47103-python-statemachine-rce
Payload GenerationVulnerability AnalysisExploitationPenetration Testing
GitHubsaiteja-erukude/cve-2026-47103-python-statemachine-rce

CVE-2026-47103-python-statemachine-rce

Python StateMachine 3.0.0 < 3.2.0에서 안전하지 않은 SCXML <data expr> 평가 및 Python eval() 주입을 통한 RCE

저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
289일 전아직 검토되지 않음

CVE-2026-47103: SCXML eval() 주입을 통한 Python StateMachine 원격 코드 실행

심각도: 치명적, CVSS 4.0 9.3, CVSS 3.1 9.8 (CNA인 VulnCheck가 부여)

벡터 (v4.0): CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

벡터 (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

영향받는 버전: Python StateMachine >= 3.0.0, < 3.2.0

수정된 버전: 3.2.0

CWE: CWE-95 (동적으로 평가되는 코드의 지시문 부적절 중화, Eval 주입); CWE-94 (코드 생성의 부적절한 제어, 코드 주입)에도 해당

발견 및 보고: Sai Teja Erukude

게시일: 2026년 6월 17일


요약

Python StateMachine 3.0.0부터 3.2.0 이전 버전에는 SCXML 처리 경로에 원격 코드 실행 취약점이 존재합니다.

SCXMLProcessor는 SCXML 문서를 받아들이며 <data expr="...">와 같은 표현식 속성을 보존합니다. 취약한 버전에서는 이러한 표현식 문자열이 SCXML 데이터모델 처리 경로를 거쳐 결국 샌드박싱 없이 Python의 내장 eval()에 도달합니다.

SCXML 문서를 제공하거나 영향을 줄 수 있는 공격자는 <data expr="..."> 속성 안에 Python 코드를 삽입할 수 있습니다. 소비 애플리케이션이 SCXML 파일을 파싱하고 프로세서를 시작하면, 해당 표현식은 호스팅 Python 프로세스의 컨텍스트에서 평가됩니다.

영향

취약한 애플리케이션이 공격자가 제어하는 SCXML 콘텐츠를 처리할 경우, 공격자는 임의의 Python 코드를 실행할 수 있습니다.

노출 범위는 소비 애플리케이션이 SCXML 문서를 수신하는 방식에 따라 원격 또는 로컬일 수 있습니다. 위험한 입력 경로는 다음과 같습니다:

  • 업로드된 SCXML 파일.
  • 사용자가 제어하는 워크플로 또는 상태 머신 정의.
  • 신뢰할 수 없는 위치에서 로드되는 구성 파일.
  • 플러그인, 확장 또는 통합에서 제공하는 SCXML 콘텐츠.
  • 사용자 입력으로부터 SCXML을 받아들이거나 생성하는 모든 네트워크 노출 기능.

성공적인 익스플로잇으로 다음이 가능합니다:

  • 호스팅 프로세스가 접근할 수 있는 파일 읽기 또는 수정.
  • 환경 변수 및 애플리케이션 비밀 정보 접근.
  • 호스트에서 접근 가능한 내부 서비스 호출.
  • 애플리케이션 동작 방해 또는 대체.

영향받는 경로

VulnCheck에 보고된 취약한 호출 체인은 다음과 같습니다:

SCXMLProcessor.parse_scxml_file()
SCXMLProcessor.process_definition()
create_datamodel_action_callable()
_create_dataitem_callable()
_eval()
eval()

이 문제는 프로세서 시작 중에 파싱된 SCXML 데이터모델 항목이 평가될 때 트리거됩니다.

기술적 세부 사항

취약한 제어 흐름에는 두 가지 신뢰 경계 실패가 있습니다:

  1. SCXML 프로세서가 SCXML 문서의 표현식 텍스트를 수용합니다.
  2. 표현식 텍스트가 원시 Python eval()로 평가됩니다.

PoC는 이 경로가 SCXMLProcessor.start() 중에 실행되기 때문에 <data expr="..."> 속성을 사용합니다. eval()에 빈 globals 딕셔너리를 전달해도 Python 빌트인은 비활성화되지 않습니다. Python은 여전히 평가 컨텍스트에 사용 가능한 빌트인을 주입할 수 있습니다. 결과적으로 표현식은 __import__에 접근하여 Python 코드를 실행할 수 있습니다.

무해한 증명 페이로드는 로컬 마커 파일을 작성합니다:

<data id="x" expr="__import__('pathlib').Path(...).write_text(...)"/>

마커는 SCXML 문서가 파싱되고 start()가 데이터모델 표현식을 평가한 후에만 생성됩니다.

개념 증명

package_builder.py는 malicious-charts/data_expr_start.scxml에 공격자가 제어하는 로컬 SCXML 파일을 생성합니다. 생성된 파일에는 이 PoC 디렉터리에 marker.txt를 쓰는 무해한 <data expr> 페이로드가 포함되어 있습니다.

run_poc.py는 훅을 설치하지 않으며 대상 패키지를 수정하지 않습니다. 공개된 python-statemachine==3.1.2 패키지를 임포트하고, SCXMLProcessor.parse_scxml_file(...)로 생성된 SCXML 파일을 파싱하고, 프로세서를 시작한 뒤, 마커의 실행 전/후 증거를 출력합니다.

로컬 테스트 환경에서만 실행하십시오:

python -m venv .venv
.venv\Scripts\activate
python -m pip install -r requirements.txt
python run_poc.py

취약한 버전에서 예상되는 증거:

statemachine_version: 3.1.2
installed_package: True
data_marker_before_start: False
data_marker_after_start: True
marker_contents:
python_statemachine_scxml_data_expr_eval_triggered
success: True

핵심 동작은 marker.txt가 start() 이전에는 존재하지 않다가 이후에 존재한다는 점이며, 이는 SCXML 표현식이 호스팅 Python 프로세스 내부에서 실행되었음을 증명합니다.

페이로드는 의도적으로 무해합니다. 이는 다음 로컬 마커 문자열만 기록합니다:

python_statemachine_scxml_data_expr_eval_triggered

셸을 실행하거나, 네트워크 서비스에 연결하거나, 시크릿을 읽거나, 데이터를 삭제하거나, PoC 디렉터리 외부의 파일을 수정하지 않습니다.

해결 방안

Python StateMachine 3.2.0 이상으로 업그레이드하십시오.

지속적인 수정 방안은 공격자가 제어하는 SCXML 표현식 텍스트를 원시 Python eval()로 평가하는 것을 피해야 합니다. 더 안전한 접근 방식은 다음과 같습니다:

  • 원시 eval()을 제한된 표현식 평가기로 교체합니다.
  • 전체 Python 표현식 평가를 명시적인 신뢰 입력 모드로 취급합니다.
  • 신뢰할 수 없는 출처의 SCXML에 대해서는 기본적으로 Python 평가를 비활성화합니다.
  • 처리 전에 위험한 SCXML 표현식 속성을 거부하거나 정제합니다.

즉시 업그레이드가 불가능한 경우:

  • 신뢰할 수 없는 사용자의 SCXML 문서를 처리하지 마십시오.
  • 인증되지 않은 클라이언트에게 SCXML 업로드 또는 워크플로 정의 기능을 노출하지 마십시오.
  • SCXML 파일이 SCXMLProcessor에 도달하기 전에 검증하십시오.
  • 최소 권한으로 제한되고 격리된 환경에서 SCXML 처리를 실행하십시오.

공개 타임라인

날짜사건
2026년 5월 22일취약점이 VulnCheck에 제출됨
2026년 5월 26일VulnCheck가 공개 절차 개시; CVE-2026-47103 잠정 할당
2026년 6월 17일CVE-2026-47103 공개

공로

Sai Teja Erukude가 발견하고 보고했습니다.

공개는 VulnCheck를 통해 조정되었습니다.

참고 자료

  • CVE 레코드: https://www.cve.org/CVERecord?id=CVE-2026-47103
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-47103
  • VulnCheck 권고: https://www.vulncheck.com/advisories/python-statemachine-rce-via-scxml-eval-injection
  • GitHub 권고: https://github.com/fgmacedo/python-statemachine/security/advisories/GHSA-v4jc-pm6r-3vj8
  • Python StateMachine 3.2.0 릴리스 노트: https://github.com/fgmacedo/python-statemachine/releases/tag/v3.2.0
  • Python StateMachine 프로젝트: https://github.com/fgmacedo/python-statemachine
도구 다운로드