🇰🇷 한글 설명
Vyper의 특정 버전에서 문자 기반 라인 오프셋과 Python의 UTF-8 바이트 오프셋을 혼용하여 발생하는 취약점입니다. 공격자가 NFKC 정규화 시 ASCII로 변환되는 비-ASCII 식별자나 보이지 않는 BOM을 포함한 소스 코드를 제출하면, 컴파일된 코드 내의 주소나 정수 등 상수가 몰래 바뀔 수 있습니다.
💡 쉬운 설명
특수 문자를 사용하여 코드를 작성하면 컴파일러가 위치를 잘못 계산하여 숫자가 몰래 바뀌는 현상입니다. 이를 통해 공격자는 프로그램의 중요한 값을 조작하여 악의적인 동작을 유도할 수 있습니다.
🇺🇸 원문 (English)
Vyper 0.1.0b1 before 0.1.0b12, 0.1.0b14, and 0.4.1 through 0.5.0b1 mix character-based line offsets with Python's UTF-8 byte col_offset values in vyper/ast/parse.py, so multi-byte characters shift the source slices used to reconstruct later numeric literals. An attacker contributing source with non-ASCII identifiers that NFKC-normalize to ASCII, or an invisible byte-order mark, can silently substitute addresses, integers or other constants in compiled code.
📍 영향받는 시스템
Vyper 0.1.0b1 미만 0.1.0b12, 0.1.0b14 미만, 0.4.1 ~ 0.5.0b1 미만
⚔️ 공격 벡터
NFKC 정규화가 가능한 비-ASCII 식별자 또는 BOM을 포함한 소스 코드 제출
🛡️ 대응 방법
취약점이 해결된 최신 버전의 Vyper로 업데이트
🔧 검증 코드
출력된 버전이 취약한 범위(0.1.0b12/b14 미만 또는 0.4.1~0.5.0b1 미만)에 해당하는지 확인
pip show vyper | grep Version