본문으로 건너뛰기
피드

Ruby 4.0 Array#pack에서 메모리 읽기 취약점 발견 — 2002년부터 숨어있던 버그

security 약 3분
vote
0
댓글
북마크

Ruby MRI의 Array#pack 메서드에서 부호 불일치로 인해 메모리를 범위 밖으로 읽을 수 있는 취약점이 발견됨. Ruby 4.0.0부터 1.6.7까지 영향.

  • 1

    unsigned/signed long 불일치로 반복 횟수가 음수가 됨

  • 2

    X 디렉티브와 결합하면 버퍼 밖 메모리 읽기 가능

  • 3

    실제 앱에서 악용 가능성은 낮지만 20년 이상 존재한 버그

  • Ruby 4.0.0 크리스마스 릴리스를 기념(?)해서 Luke Jahnke가 Ruby MRI의 정수 처리 버그를 다시 들여다봤는데, Array#pack 메서드에서 할당된 문자열 버퍼 범위를 넘어 메모리를 읽을 수 있는 취약점을 발견함

  • 영향 범위가 좀 놀라운데, Ruby 4.0.0은 물론이고 2002년에 나온 Ruby 1.6.7까지 거슬러 올라감. 20년 넘게 숨어있던 버그인 셈

  • 핵심은 pack 메서드의 반복 횟수(repeat count) 처리에 있음. ruby_strtoul이 unsigned long을 반환하는데 이걸 받는 len 변수는 signed long이라, 큰 양수 값이 음수로 해석되는 고전적인 부호 불일치(signedness mismatch) 문제

  • 여기에 X 디렉티브("1바이트 뒤로")를 결합하면 재밌는 일이 벌어짐. 음수만큼 문자열을 줄이라고 했더니 오히려 문자열이 커져버리는 것. 이걸로 할당 범위 밖의 메모리를 읽을 수 있게 됨

  • 무제한으로 읽을 수 있는 건 아니고, rb_str_set_len의 가드 조건에 걸림. 용량이 2의 거듭제곱으로 반올림되기 때문에, 배열 안의 문자열 길이를 2의 거듭제곱으로 맞추면 가드를 피하면서 최대한 많이 읽을 수 있음

ℹ️참고

> 실제로 영향을 받을 가능성은 낮음. Array#pack이 실제 Ruby 앱에서 거의 안 쓰이고, 공격자가 메서드 인자를 제어할 수 있는 경우는 더 드묾. 하지만 메모리 디스클로저 자체의 심각성은 높으니 업데이트 권장

C 언어의 부호 불일치 버그가 20년 넘게 생존한 사례. 잘 안 쓰이는 API일수록 감사가 소홀해지는 전형적인 패턴임.

댓글

댓글

댓글을 불러오는 중...

security

한양대 에리카와 네이버클라우드, 클라우드·보안·AI 인재 키우는 산학협력 체결

한양대 에리카가 네이버클라우드와 첨단 분야 지역인재 양성과 글로벌 산학협력을 위한 업무협약을 맺었다. 협력 범위는 클라우드, 사이버보안, 블록체인, 개인정보보호, 인공지능(AI), 디지털 전환(DX) 교육·연구 기반 구축까지 포함된다.

security

악성 npm 패키지가 AI 개발도구의 지침 파일과 MCP까지 노리기 시작함

이스트시큐리티가 웹과 탈중앙화금융 개발자를 겨냥한 악성 npm 패키지 캠페인을 포착했어. 공격자는 유명 웹3 도구를 사칭하는 데서 그치지 않고, AI 에이전트가 읽는 프로젝트 지침 파일과 MCP 기반 외부 도구 호출까지 공격 경로로 삼으려 했어.

security

금융권, 앤트로픽 미토스가 찾은 오픈소스 취약점에 긴급 점검 들어감

앤트로픽의 AI 모델 클로드 미토스가 1000개 넘는 오픈소스에서 대량의 취약점 후보를 찾아냈고, 그중 일부가 실제 취약점으로 검증돼 공개됐어. 금융당국은 nginx, wolfSSL, FreeRDP, Ghost 같은 널리 쓰이는 구성요소를 중심으로 금융권에 긴급 자산 점검과 패치 적용을 권고했어.

security

애플이 양자 내성 암호화 검증 코드를 공개했다, 핵심은 수학적 증명

애플이 corecrypto 라이브러리의 포스트 양자 암호화 구현과 검증 코드를 GitHub에 공개했다. ML-KEM, ML-DSA 구현과 형식 검증 접근을 공개해 보안 연구자들이 직접 검토할 수 있게 했고, 이 기술은 25억 대 이상 활성 기기에서 쓰이는 암호화 기반과 연결된다.

security

라라벨 번역 패키지 태그가 통째로 바뀌었다, 개발자 비밀값 털리는 공급망 공격

전 세계 라라벨 개발자가 쓰는 Laravel-Lang 패키지가 공격을 받아 Git 태그가 악성 버전을 가리키도록 바뀌었다. 5월 22일 약 90분 동안 4개 저장소의 태그가 교체됐고, 감염된 패키지는 AWS 키, GitHub 토큰, Stripe 시크릿, 암호화폐 지갑 복구 구문, SSH 개인키 등을 노렸다.