깃랩 RCE 유발한 4년 묵은 Parser 버그... 루비 안전망도 무너졌다 작성일 07-27 34 목록 <div id="layerTranslateNotice" style="display:none;"></div> <div class="article_view" data-translation-body="true" data-tiara-layer="article_body" data-tiara-action-name="본문이미지확대_클릭"> <section dmcf-sid="VWC3BrDgI7"> <p contents-hash="14a3ecae82adacebff175235925ea03abd8ee4cccce57e98fdc7de5b7f94e133" dmcf-pid="fYh0bmwaOu" dmcf-ptype="general"><strong>고성능 JSON Parser ‘Oj’ 내부 C 확장 모듈서 메모리 손상 취약점 2종 발견<br>주피터 노트북 파일 렌더링 과정 악용 시 방어막 우회해 서버 권한 탈취</strong></p> <p contents-hash="8f214a600e7ebc7c7aa2d5d72dff39f107ed8bc01741f7e4e222888b90cf2086" dmcf-pid="4GlpKsrNmU" dmcf-ptype="general">[보안뉴스 조재호 기자] 루비(Ruby)와 같은 메모리 안전(Memory-safe) 언어로 구축된 협업 플랫폼 깃랩(GitLab)에서 하위 C 언어 확장 모듈의 메모리 손상 취약점을 악용한 원격 코드 실행(RCE) 공격 경로가 밝혀졌다.</p> <figure class="figure_frm origin_fig" contents-hash="14eb5b4e93aae107beb5d5a45b00ce1aaa132df153e144a9266ae753e351cc49" dmcf-pid="8FGb6vlwEp" dmcf-ptype="figure"> <p class="link_figure"><img class="thumb_g_article" data-org-src="https://t1.daumcdn.net/news/202607/27/552815-KkymUii/20260727173200985degd.jpg" data-org-width="750" dmcf-mid="2cLCYeMVrz" dmcf-mtype="image" height="auto" src="https://img2.daumcdn.net/thumb/R658x0.q70/?fname=https://t1.daumcdn.net/news/202607/27/552815-KkymUii/20260727173200985degd.jpg" width="658"></p> </figure> <div contents-hash="61bf700085042b1ff28843a7cc2ac9b1f2811e1320c2d4884d0ad816cc797255" dmcf-pid="63HKPTSrD0" dmcf-ptype="general"> <br>사이버보안 연구소 뎁스퍼스트(depthfirst)는 오픈 디펜스 이니셔티브 프로젝트의 일환으로 루비 환경에서 광범위하게 쓰이는 고성능 JSON Parser ‘Oj’ gem 모듈을 분석한 결과 총 18개의 주요 취약점과 7개의 메모리 안전성 위반 요소를 발견했다고 전했다. 이 중 버퍼 경계 초과 쓰기(Out-of-bounds write)와 힙 포인터 노출(Heap-pointer disclosure) 취약점 2종이 결합되어 깃랩 환경의 RCE 공격 체인으로 이어졌다. </div> <p contents-hash="38fce35d18e8230355734a15b5f52ff942d1bdf2d6298f8a9a59bdfe39b95c9d" dmcf-pid="P0X9Qyvms3" dmcf-ptype="general">이번 취약점의 핵심 진입점은 깃랩 내부의 주피터 노트북(Jupyter Notebook; .ipynb) 차이점(Diff) 렌더링 기능이다. 주피터 노트북 파일은 JSON 구조체로 저장된다. 깃랩은 사용자가 커밋한 노트북 파일의 변경 사항을 시각적으로 변환하기 위해 자체 내부 모듈인 ‘ipynbdiff’(ipynbdiff)를 거쳐 C 네이티브 확장으로 작성된 Oj Parser를 호출한다.</p> <p contents-hash="d946b4747a05294cb9c2acf4e6510d2e52fc15c2e7e2955ec378a8e9a64aae9d" dmcf-pid="QpZ2xWTsIF" dmcf-ptype="general">공격 메커니즘을 살펴보면, 검증되지 않은 중첩 스택 구조로 인한 버퍼 오버플로 버그가 Parser 내부 상태 포인터를 조작하는 쓰기 수단을 제공했다. 여기에 키 길이 변환 오류로 발생한 힙 포인터 노출 버그가 결합하면서 루비 런타임의 가상 머신 메모리 구성을 직접 제어할 수 있는 상태에 도달했다.</p> <p contents-hash="ae0206f5c30cdaab5674a66421202f74a15a1fa8d1fca6a4d6895c64da9f9b1f" dmcf-pid="xU5VMYyOrt" dmcf-ptype="general">공격자는 프로젝트에 악의적으로 조작된 .ipynb 파일을 커밋한 뒤 웹 브라우저에서 해당 커밋의 차이점 페이지를 조회하는 것만으로 공격 코드를 실행할 수 있다. 요청을 받은 웹서버 워커 프로세스인 푸마(Puma) 내부에서 Oj C 확장에 저장소 데이터가 전달되며 원격 코드 실행이 완료된다. </p> <p contents-hash="3478ea1d87d2d17138a19f14455dce2afa8975d6947d233fe65069ad264e0146" dmcf-pid="yAnIWRx2r1" dmcf-ptype="general">해당 취약점은 Oj Parser 코드에 2021년 8월 8일 처음 유입된 이후 약 5년 동안 방치되었다. 깃랩에는 2022년 7월 모듈 업데이트와 함께 도입되어 깃랩 CE 및 EE 15.2.0 버전부터 18.11.4 및 19.0.1 버전까지 영향을 미쳤다. 깃랩 측은 보고를 받은 직후 Oj 3.17.3 버전으로 패치한 보안 업데이트를 긴급 배포했다.</p> <p contents-hash="192cb1e93cd75fe1b36e1f2805dfa55dd57747ac17056157f414678dcfd25971" dmcf-pid="WcLCYeMVm5" dmcf-ptype="general">문광석 한국정보공학기술사회 미래융합기술원장은 “최근 많은 공격의 시발점이 된 GitHub외에도 내부적인 Repository로 각광 받는 Gitlab도 안전할 수 없다는 점이 확인된 사건”이라며 “단순 패치를 넘어 사용자 입력이 도달하는 내부 Parser까지 확장해 좀 더 큰 입력 범위의 위협 모델링으로 ‘Secure by Design’ 방식의 검토가 필요할 것” 이라고 말했다.</p> </section> </div> <p class="" data-translation="true">Copyright © 보안뉴스. 무단전재 및 재배포 금지.</p> 관련자료 이전 자황원외탕전실, '소염제통약침' 자가면역질환 염증 억제 기전 규명 07-27 다음 [현장] 보물 찾고 매장 누빈다…'로블록스'가 만든 '성수 퀘스트' 07-27 댓글 0 등록된 댓글이 없습니다. 로그인한 회원만 댓글 등록이 가능합니다.