Clés API Magento oubliées : elles survivent au mot de passe
Une intégration ERP, un vieux connecteur marketplace, un token OAuth de 2019 : ils survivent au mot de passe admin. Révoquez toutes les clés que vous ne pouvez pas nommer. Puis seulement, changez le mot de passe humain.
Une intégration ERP ou un vieux connecteur. Révoquez toutes les clés que vous ne pouvez pas nommer. Puis changez le mot de passe admin.
Pourquoi le mot de passe ne suffit pas
Magento (et Adobe Commerce) sépare l'humain (admin + ACL) et la machine (Integrations OAuth, tokens REST, clés dans `env.php`). Changer `admin123` laisse le token ERP vivant. C'est le piège le plus cher après un « on a tout sécurisé ». L'ordre : inventaire et révocation des clés, invalidation des sessions admin, puis nouveau mot de passe. Inverser = le token recrée un admin pendant que vous tapez le nouveau secret.
Cadre incident : Magento Magecart, guide. Même idée côté Presta (webservice) et Woo (REST keys).
Où Magento range les secrets
System → Extensions → Integrations (OAuth consumers, callbacks). System → Extensions → API (selon version). Tokens dans les tables `oauth_*`. `app/etc/env.php` : crypt key, credentials DB, parfois cache Redis, files. Magento 1 : `local.xml`, admin users API. Les extensions (ERP, PIM, marketplace) ajoutent leurs propres tables et fichiers `etc/`.
Les CI/CD (deployer, Bitbucket) et les laptops freelance ont des copies de `env.php`. Un roll dans l'admin sans tourner ces copies, et l'ancien secret revient au prochain deploy. Listez les consommateurs humains : qui a le repo ?
Inventaire : nommer ou tuer
Pour chaque intégration : à quoi elle sert, qui l'a demandée, quelles ressources ACL (orders, customers, cms, users). Ce que personne ne revendique : révoquer. Ce que l'ERP revendique : roll (nouveau secret, MAJ côté ERP le même jour, test d'un flux). Un « on verra lundi pour l'ERP » laisse une porte ouverte le week-end.
Les access tokens personnels d'un développeur parti : morts. Les sandbox mélangés à la prod : séparés et rollés.
- Integrations : responsable nommé ou révocation.
- ACL de chaque token lue (write vs read).
- Date de dernière utilisation si les logs la donnent.
Tokens en env.php et hors admin
La crypt key Magento protège des secrets en base. Si `env.php` a fuité (git public, backup web, voisin), partez du principe que des valeurs déchiffrables ont pu l'être. Tournez la crypt key est une opération délicate (données déjà chiffrées) : ne le faites pas à 23 h sans procédure. En urgence : révoquez les tokens applicatifs, tournez DB password, restreignez l'accès au fichier.
Les `.env` Docker, les secrets Kubernetes, les variables chez l'hébergeur : même inventaire. Migration — un zip Magento voyage aussi mal.
Ce qu'une clé oubliée a déjà pu faire
Lire commandes et clients (RGPD). Écrire un CMS block (skimmer). Créer un admin. Pousser un prix. Exporter un flux. La clé `read` n'est pas « inoffensive » : c'est une exfiltration possible. Le constat données dépend de ce que le token permettait, pas de ce que vous « croyez qu'ils ont fait ».
Les journaux API Magento / le WAF / les access.log sur `/rest/` datent. Exportez avant rotation des logs hébergeur.
Roll sans casser l'ERP
Prévenez l'équipe qui opère l'ERP / le PIM une heure avant. Nouveau secret, test d'un GET inoffensif, puis cutover. Un roll à froid un samedi sans la personne qui connaît le connecteur = commandes qui ne partent plus, et la tentation de « remettre l'ancienne clé une minute ». Cette minute est le dossier.
Documentez le nouveau secret dans un gestionnaire, pas dans un email. Révoquez l'ancien tout de suite, pas « quand on sera sûrs » trois semaines.
Webhooks et callbacks liés
Les integrations ont une callback URL. Si elle pointe vers un hôte inconnu, l'OAuth dance peut servir un tiers. Les webhooks PSP sont un autre tiroir — webhooks paiement — à faire dans la même vacation. Les cron Magento qui poussent vers une URL : listez `cron_schedule` et les configs d'export.
Relire à J+7 : la clé qui revient
Un deploy, un module « reconfigure », un backup d'`env.php` remis par erreur. Relistez les integrations. Un token nouveau sans ticket interne = incident. Service : Magento. Déclaration : créer un compte.
- Plus aucune intégration innommable.
- ERP recollé le jour du roll.
- env.php et copies hors git public.
- Contrôle à J+7.
Adobe Commerce Cloud et les clés hors admin
Sur Cloud, des variables d'environnement, des integrations Fastly, des clés New Relic, un utilisateur SSH git : l'admin Magento n'est pas le seul tiroir. Après un incident, passez aussi par le panel Cloud / le projet git. Un token CI qui déploie `env.php` avec l'ancienne intégration ramène la porte. Coordonnez-vous avec l'équipe qui merge.
Les webhooks Adobe / les apps marketplace installées en « integration » apparaissent parfois ailleurs que System → Integrations. Inventaire Complet : `bin/magento integration:list` (selon version), tables oauth, panel Cloud. Magento Magecart.
Un store view B2B avec son propre ERP : deux jeux de clés. Un roll « global » oublié du website US laisse une porte. Listez par website. Boutique B2B si les grilles partent par API.