1P by GN⁺ | ★ favorite | 댓글 1개
  • AUR(Arch User Repository)에 다수의 악성 커밋이 삽입돼, 패키지 설치 과정에서 npm install atomic-lockfile을 실행하도록 변조된 공급망 공격 발생
  • 읽기 전용 미러 검색 결과, 약 408개 패키지의 PKGBUILD·.install·.hook 파일에서 동일한 악성 명령 확인
  • 악성 커밋은 직전 커밋의 이름·이메일을 도용해 정상 메인테이너를 사칭하는 커밋 위조 방식이며, 계정 탈취 여부와 별개
  • Arch 측은 악성 커밋 초기화·삭제계정 차단을 진행 중이며, 추가 악성 패키지는 하나의 스레드로 모아 신고 요청
  • 커뮤니티 구성원들이 개별 패키지 커밋을 잇따라 신고하며 협력적 대응 진행, AUR 패키지 생태계 전반에 영향을 미치는 대규모 사안임

사건 개요 및 대응 요청

  • AUR에 악성 커밋이 대량 삽입된 정황이 공유되며, 악성 커밋 초기화/삭제 및 계정 차단 작업이 진행 중
  • 추가 악성 패키지 발견 시, 동일 스레드로 모으기 위해 이 이메일에 회신 형태로 신고해 달라는 요청
  • 조정 담당자가 접수된 신고를 모두 확인했다고 회신했으며, 신고에 시간을 들인 참여자들에게 감사 표명

악성 코드 패턴 — atomic-lockfile

  • 변조된 패키지들은 공통적으로 npm install atomic-lockfile을 실행하며, 뒤에 ora, fast-glob, glob, minimist, axios, commander, execa, chalk, debug 등 추가 npm 패키지명이 함께 붙음
  • 악성 명령이 위치한 파일 유형
    • *-deps.install 형태의 설치 스크립트
    • *.install 패키지 설치 스크립트
    • *.hook 파일 — 예: Exec = /bin/sh -c 'cd /tmp && npm install atomic-lockfile ... 2>/dev/null; exit 0' 형태로 /tmp에서 실행 후 오류를 숨기고 종료
    • 일부는 install.sh 등 관련 파일에 포함
  • 신규 생성된 악성 패키지 사례로 exodus-wallet-bin이 보고되었으며, 첫 커밋 기준 약 4시간 전 생성된 신생 패키지로 확인

탐지 방법 및 영향 범위

  • 읽기 전용 미러를 직접 점검하는 방식으로 탐지
    • git clone https://github.com/archlinux/aur.git 후, 모든 ref를 순회하며 git grep 'atomic-lockfile' 수행
    • 결과로 atomic-lockfile을 설치하는 약 408개 패키지의 긴 목록 확보, 자동 정리(cleanup) 작업에 활용 가능
  • 영향받은 것으로 거론된 패키지 예시
    • runescape-launcher, oracle-bin, tesseract-gui, python-starsessions, bitcoin-core-git, apple-music-desktop, exodus-wallet-bin, anythingllm-appimage, arm-linux-gnueabihf-binutils
    • cutefish-*, python2-*, python-* 계열 등 광범위한 패키지군 포함
  • 대량 개별 신고로 메일이 많아지자, 여러 건을 한 메일로 묶어 보내는 방식이 권장되었고, IRC에서 통합 패키지 목록이 별도 공유됨

사칭/위조 방식

  • 특정 계정(arojas) 관련 패키지에 대해 계정 탈취인지 커밋 위조인지에 대한 의문이 제기됨
  • 이에 대해 악성 커밋은 직전 커밋의 이름과 이메일을 사칭(impersonate) 하는 방식이라고 확인 — 즉 커밋 메타데이터 위조
  • 동일 사용자의 다른 패키지들은 이미 수정 완료된 경우도 보고됨

대응 현황

  • 신고된 패키지 커밋들이 순차적으로 처리되었고, 일부 항목은 수정 완료(Done) 회신으로 확인
  • 추가 신고가 이어지자 조정 담당자가 접수분을 일괄 확인, 진행 중인 차단·초기화 작업과 병행
  • 다수 참여자가 커밋 링크와 함께 개별 패키지를 신고하며 커뮤니티 주도 협력 대응 형태로 진행

댓글과 토론

Lobste.rs 의견들
  • 이 일로 커뮤니티의 익명·미검증 기여에 남아 있던 신뢰가 거의 끝날 것 같음
    신뢰가 실시간으로 깎여 나가는 걸 보는 느낌임

    • 솔직히 말하면 좋은 일이고, 이미 늦었음. 우리 업계는 이제 정신 차려야 함
      컴퓨터에는 개인적이고 민감한 데이터를 너무 많이 맡기고 있고, 현대 생활의 중심이 됐음. 개인용 컴퓨터가 감염되면 그건 정말 재앙적인 사건이고, 운이 좋으면 해커가 굳이 나를 콕 집어 괴롭힐 만큼 내가 흥미롭지 않기를 바라는 정도임
      그런데도 우리는 어째서인지 아무 랜덤 프로그램이나 전체 권한으로 실행하는 걸 정상화해 왔고[1], 그게 나쁜 생각으로 드러날 때마다 놀란 척함
      [1] 현재 사용자 권한 기준임. 대부분의 설정에서 root는 사실상 의미가 거의 없음
    • KDE는 일주일 전에 자체 빌드 파이프라인에서 AUR를 제거했는데, 아마 이 공격의 이전 버전에 대한 대응이었던 것 같음
    • AUR 패키지 검토에 신뢰망 모델을 적용하고, 최근 업데이트에는 냉각 기간을 결합하면 흥미로울 듯함
      AUR 패키지를 설치하거나 업데이트할 때 이런 선택지를 주는 시스템을 상상해 봄: 최근 업데이트된 패키지라면 1주일 식을 때까지 기다리기, 직접 몇 분 들여 패키지를 검토하고 평판에 연결된 서명된 검토를 남기기, 충분한 신뢰가 쌓인 여러 다른 사람의 서명된 검토에 의존하기
      냉각 기간은 모든 패키지를 함께 최신으로 유지한다는 Arch 정책과 기술적으로 맞지 않을 수도 있음. 하지만 AUR 패키지는 어차피 공식 지원 대상이 아니기도 함
  • 몇 시간이 지났는데도 NPM 패키지가 아직 내려가지 않았음: https://www.npmjs.com/package/atomic-lockfile

  • 설치된 패키지가 영향을 받았는지 확인하려면 aur_pkg_list.txt 파일과 함께 이 작은 스크립트를 쓰면 됨

    installed_pkgs="$(yay -Qq)";  
    grep refs aur_pkg_list.txt | awk -F/ '{print $4}' | tr -d ')' \  
    | while read -r pkg; do \  
        echo "$installed_pkgs" | grep "^$pkg\$"; \  
    done  
    

    세미콜론을 넣어뒀으니 한 줄 명령으로 만들기 쉬움 :-)

    • 부분 문자열까지 잡는 것 같음. 예를 들어 kteakteatime에도 매칭됨
      이 버전은 동작하는 듯함

      grep refs aur_pkg_list.txt | awk -F/ '{print $4}' | tr -d ')' | while read -r pkg; do  
         echo "$installed_pkgs" | grep "^$pkg\$";  
      done  
      
  • 이 일이 꽤 전부터 진행됐을 수도 있음. 18일 전 이 이메일을 보면 비슷한 악성 페이로드가 쓰인 듯한데, 악성 커밋은 저장소에서 아예 제거된 것 같음

  • 관련해서, 인기 있는 Linux 배포판들의 공급망 보안 태세를 잘 비교한 자료가 있을까? 지금까지 찾은 글 대부분은 은근한 마케팅이거나 AI가 만든 허접한 글처럼 보였음. 그냥 직접 조사해야 할지도 모르겠음
    우울한 부분은 커뮤니티 개발의 이상을 좋아하면서도, 공급망 걱정 때문에 폐쇄적인 선택지나 심지어 독점 소프트웨어 쪽을 더 자세히 보게 된다는 점임