Dependency Confusion

Reading time: 3 minutes

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기

Basic Information

요약하자면, dependency confusion 취약점은 프로젝트가 잘못된 이름, 존재하지 않는 이름 또는 명시되지 않은 버전의 라이브러리를 사용할 때 발생하며, 사용된 의존성 저장소가 공개 저장소에서 업데이트된 버전을 수집할 수 있도록 허용합니다.

  • 잘못된: **reqests**를 가져오는 대신 requests를 가져오기
  • 존재하지 않는: 더 이상 존재하지 않는 내부 라이브러리인 company-logging 가져오기
  • 명시되지 않은 버전: 내부존재하는 company-requests 라이브러리를 가져오지만, 저장소가 더 높은 버전이 있는지 공개 저장소를 확인합니다.

Exploitation

warning

모든 경우에 공격자는 피해 회사에서 사용하는 라이브러리의 이름으로 악성 패키지를 게시하기만 하면 됩니다.

Misspelled & Inexistent

귀사가 내부 라이브러리가 아닌 라이브러리가져오려고 한다면, 라이브러리 저장소가 공개 저장소에서 이를 검색할 가능성이 높습니다. 공격자가 이를 생성했다면, 귀하의 코드와 실행 중인 머신은 매우 높은 확률로 손상될 것입니다.

Unspecified Version

개발자들이 사용된 라이브러리의 버전을 명시하지 않거나 단지 주 버전만 명시하는 경우가 매우 흔합니다. 그러면 인터프리터는 해당 요구 사항에 맞는 최신 버전을 다운로드하려고 시도합니다.
라이브러리가 잘 알려진 외부 라이브러리(예: python requests)인 경우, 공격자는 많은 것을 할 수 없습니다, 왜냐하면 그는 requests라는 이름의 라이브러리를 만들 수 없기 때문입니다(그가 원래 저자가 아닌 한).
그러나 라이브러리가 내부에 있는 경우, 이 예제의 requests-company처럼, 라이브러리 저장소외부에서도 새로운 버전을 확인할 수 있도록 허용한다면, 공개적으로 사용 가능한 더 최신 버전을 검색할 것입니다.
따라서 공격자가 회사가 requests-company 라이브러리 버전 1.0.1(소규모 업데이트 허용)을 사용하고 있다는 것을 알게 되면, 그는 requests-company 버전 1.0.2게시할 수 있으며, 회사는 내부 라이브러리 대신 해당 라이브러리사용하게 됩니다.

AWS Fix

이 취약점은 AWS CodeArtifact에서 발견되었습니다(자세한 내용은 이 블로그 게시물에서 읽어보세요).
AWS는 라이브러리가 내부인지 외부인지 명시할 수 있도록 하여 외부 저장소에서 내부 의존성을 다운로드하는 것을 방지했습니다.

Finding Vulnerable Libraries

dependency confusion에 대한 원본 게시물에서 저자는 자바스크립트 프로젝트의 의존성을 포함하는 수천 개의 노출된 package.json 파일을 검색했습니다.

References

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기