# Dependency Confusion {{#include ../banners/hacktricks-training.md}} ## 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**에서 발견되었습니다(자세한 내용은 [**이 블로그 게시물**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)에서 읽어보세요).\ AWS는 라이브러리가 내부인지 외부인지 명시할 수 있도록 하여 외부 저장소에서 내부 의존성을 다운로드하는 것을 방지했습니다. ## Finding Vulnerable Libraries [**dependency confusion에 대한 원본 게시물**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610)에서 저자는 자바스크립트 프로젝트의 의존성을 포함하는 수천 개의 노출된 package.json 파일을 검색했습니다. ## References - [https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610) - [https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d) {{#include ../banners/hacktricks-training.md}}