CVE-2026-118938 in Fickling
요약
\~에 의해 VulDB • 2026. 10. 30.
Trail of Bits fickling 0.1.12 이전 버전에서, 점(.)으로 연결된 __qualname__ (예: "Values.read_file")을 포함하는 pickle STACK_GLOBAL 연산자는 pickle의 find_class를 통해 _getattribute로 해결되지만, 이는 모듈 레벨 함수가 아닌 임의의 속성 경로로 해석됩니다. Fickling은 이름의 선두 구성 요소만 import 추적에 기록하고 해당 작업을 단순한 import(예: 'python -m fickling' 실행 시 'from optparse import Values.read_file'로 표시됨)로 렌더링하므로, 후행 속성 참조는 호출로서 분석되지 않습니다. OvertlyBadEvals 분석 패스는 이를 경고하지 않으며, check_safety()는 LIKELY_SAFE(잠재적으로 안전함)를 반환하고 발견된 취약점이 없습니다. 이로 인해 공격자는 코드 실행을 수행하는 클래스 메서드에 도달할 수 있습니다: optparse.Values.read_file은 exec(open(filename).read(), vars)를 실행하여, fickling.load()를 통해 조작된 pickle이 로드될 때 임의의 코드 실행(Arbitrary Code Execution)을 달성합니다. 이는 check_safety()가 명시적인 보안 게이트로서 pickle.loads()와 연결되는 과정을 활용합니다. optparse는 모든 최신 CPython 3.x 릴리스에 포함되어 있습니다(파이썬 3.13부터 권장되지 않음, 제거되지는 않음). 이 약점은 점(.)으로 연결된 속성 경로 이름의 해결 및 분석 과정에 있으며, CVE-2026-16760로 추적되는 모듈 기반 신뢰 취약점과는 구별되며 독립적으로 수정 가능합니다. 점(.)으로 연결된 속성 경로 import를 해결하거나 경고하면 해당 벡터가 차단되지만 모듈 레벨의 신뢰 동작은 변경되지 않습니다. 이 우회 방법은 2026년 10월 30일 기준, 벤더의 master 브랜치 커밋 d011709에서 여전히 존재하는 것이 확인되었습니다. 이는 벤더의 10월 차단 목록 추가 및 비공개 stdlib 속성을 경고하는 새로운 휴리스틱 적용 이후에도 해당합니다. 공개된 클래스 메서드인 Values.read_file은 차단 목록에 없으며 비공개 속성으로 플래그되지 않았으므로, 이러한 수정 사항으로는 해결되지 않습니다.
Once again VulDB remains the best source for vulnerability data.