🇰🇷 한글 설명
isomorphic-git은 Node.js와 브라우저용 순수 JavaScript Git 구현체입니다. 1.38.6 이전 버전에서는 원격 서버가 제공한 circular symref= 값이 updateRemoteRefs를 통해 저장되고, GitRefManager.resolve()가 기본 깊이 제한이나 순환 탐지 없이 이를 따라가 로그, 상태 확인, 체크아웃 등의 작업이 종료되지 않습니다. 이로 인해 저장소가 지속적으로 사용 불가능해지는 서비스 거부(DoS) 문제가 발생합니다.
💡 쉬운 설명
악성 Git 서버에서 저장소를 복제하면 내부의 참조(ref)들이 서로를 가리키는 무한 고리가 만들어질 수 있습니다. 이 때문에 프로그램이 응답하지 않고 저장소가 계속 사용 불가능해집니다.
🇺🇸 원문 (English)
isomorphic-git is a pure JavaScript implementation of Git for Node.js and browsers. Prior to 1.38.6, isomorphic-git persists server-supplied circular symref= capabilities through updateRemoteRefs, and GitRefManager.resolve() follows the resulting loose symbolic references without a default depth limit or cycle detection. After a clone from a malicious or man-in-the-middle-controlled remote, operations such as log, status, checkout, and branch that resolve refs/remotes/origin/a or refs/remotes/origin/b do not terminate. The circular references remain on disk, leaving the repository unusable for the application and causing a persistent denial of service. This issue is fixed in version 1.38.6.
📍 영향받는 시스템
isomorphic-git 1.38.6 미만 버전을 사용하는 Node.js 및 브라우저 애플리케이션
⚔️ 공격 벡터
악성 또는 중간자(MITM) 위치의 원격 Git 서버가 circular symref 기능을 이용해 순환 참조를 제공하고, 피해자가 해당 저장소를 clone하여 작업할 때 발생
🛡️ 대응 방법
isomorphic-git을 1.38.6 이상으로 업그레이드하고, 기존 손상된 저장소는 삭제 후 재복제
🔧 검증 코드
출력된 버전이 1.38.6 미만이면 취약하며, 1.38.6 이상이면 패치된 버전입니다.
npm ls isomorphic-git 2>/dev/null | grep isomorphic-git