Dependency Confusion
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
У підсумку, вразливість залежності виникає, коли проект використовує бібліотеку з неправильно написаною назвою, неіснуючою або з неуточненою версією, а використовуваний репозиторій залежностей дозволяє збирати оновлені версії з публічних репозиторіїв.
Неправильно написана: Імпорт reqests
замість requests
Неіснуюча: Імпорт company-logging
, внутрішньої бібліотеки, яка більше не існує
Неуточнена версія: Імпорт внутрішньої існуючої бібліотеки company-requests
, але репозиторій перевіряє публічні репозиторії, щоб дізнатися, чи є новіші версії.
У всіх випадках атакуючому потрібно лише опублікувати шкідливий пакет з назвою бібліотек, які використовує компанія-жертва.
Якщо ваша компанія намагається імпортувати бібліотеку, яка не є внутрішньою, ймовірно, репозиторій бібліотек буде шукати її в публічних репозиторіях. Якщо атакуючий створив її, ваш код і машини, що працюють, ймовірно, будуть скомпрометовані.
Досить поширено, що розробники не вказують жодну версію використовуваної бібліотеки або вказують лише основну версію. Тоді інтерпретатор спробує завантажити остання версія, що відповідає цим вимогам.
Якщо бібліотека є відомою зовнішньою бібліотекою (як python requests
), атакуючий не може багато зробити, оскільки він не зможе створити бібліотеку з назвою requests
(якщо він не є оригінальним автором).
Однак, якщо бібліотека є внутрішньою, як requests-company
в цьому прикладі, якщо репозиторій бібліотеки дозволяє перевіряти нові версії також зовні, він буде шукати новішу версію, доступну публічно.
Отже, якщо атакуючий знає, що компанія використовує бібліотеку requests-company
версії 1.0.1 (дозволяє незначні оновлення). Він може опублікувати бібліотеку requests-company
версії 1.0.2, і компанія буде використовувати цю бібліотеку замість внутрішньої.
Цю вразливість було виявлено в AWS CodeArtifact (читайте деталі в цьому блозі). AWS виправив це, дозволивши вказувати, чи є бібліотека внутрішньою чи зовнішньою, щоб уникнути завантаження внутрішніх залежностей з зовнішніх репозиторіїв.
У оригінальному пості про вразливість залежності автор шукав тисячі відкритих файлів package.json, що містять залежності проектів на javascript.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)