[하루한줄] Tampering with arbitrary packages in @types scope of npm

URL

Tampering with arbitrary packages in @types scope of npm

Target

Definitely typed

dt-mergebot

Explain

Definitely Typed의 pull request 관리 bot에서 취약점이 발견되었습니다. Definitely typed는 @type scope 속 npm 패키지를 관리하는 프로젝트로 해당 취약점을 악용하면 악성 pull request를 merge 해 @type scope속 임의의 패키지를 조작할 수 있습니다.

취약점이 존재하는 dt-mergebot은 다음과 같은 작업을 합니다.

  1. pull request로부터 변화된(changes) 파일을 fetch
  2. 패키지에 해당 파일이 있는지 검사
  3. 패키지 관리자에게 보고
  4. 패키지 관리자가 승인하면 해당 pull request는 merge 권한 부여
  5. pull request 작성자가 Ready to merge 코멘트를 달면 merge 수행

문제는 dt-mergebot이 pull request의 merge권한을 계산할 때 첫 100개의 file만을 fetch 하기 때문에 101개 이상의 changes가 있는 pull request는 101 번째 파일부터 권한 검사 대상에서 제외됩니다.

query PR($pr_number: Int!) {
    repository(owner: "DefinitelyTyped", name: "DefinitelyTyped") {
      id
      pullRequest(number: $pr_number) {
        [...]
        files(first: 100) {
          totalCount
          nodes {
            path
            additions
            deletions
          }
        }
        [...]
      }
   }
}