4840 - Pentesting OPC UA
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
Basic Information
OPC UA (Open Platform Communications Unified Access) est un protocole open-source crucial utilisé dans diverses industries comme Manufacturing, Energy, Aerospace et Defence pour l’échange de données et le contrôle d’équipements. Il permet de façon unique à des équipements de différents vendors de communiquer, en particulier avec les PLCs.
Sa configuration permet de mettre en place des mesures de sécurité fortes, mais souvent, pour assurer la compatibilité avec des appareils plus anciens, ces mesures sont adoucies, exposant les systèmes à des risques. De plus, trouver des services OPC UA peut être difficile car les scanners réseau peuvent ne pas les détecter s’ils se trouvent sur des ports non standards.
Default port: 4840 (binary opc.tcp). Many vendors expose separate discovery endpoints (/discovery), HTTPS bindings (4843/443), or vendor-specific listener ports such as 49320 (KepServerEX), 62541 (OPC Foundation reference stack) and 48050 (UaGateway). Expect multiple endpoints per host, each advertising transport profile, security policy and user-token support.
| Built-in NodeId | Why it matters |
|---|---|
i=2253 (0:Server) | Contient ServerArray, des vendor/product strings et des namespace URIs. |
i=2256 (ServerStatus) | Révèle le temps de fonctionnement, l’état actuel, et éventuellement des build info. |
i=2267 (ServerDiagnosticsSummary) | Montre le nombre de sessions, les requêtes avortées, etc. Utile pour fingerprinting des tentatives de brute-force. |
i=85 (ObjectsFolder) | Point d’entrée pour parcourir les tags exposés, methods et alarms des appareils. |
PORT STATE SERVICE REASON
4840/tcp open unknown syn-ack
Pentesting OPC UA
Pour révéler des problèmes de sécurité dans les serveurs OPC UA, effectuez un scan avec OpalOPC.
opalopc -vv opc.tcp://$target_ip_or_hostname:$target_port
Guide de découverte et d’énumération
- Localiser tous les transports OPC UA
nmap -sV -Pn -n --open -p 4840,4843,49320,48050,53530,62541 $TARGET
Répétez sur les adresses de groupe UDP si l’environnement utilise la découverte multicast LDS-ME.
- Empreinter les endpoints
- Invoquez
FindServers/GetEndpointssur chaque transport pour capturerSecurityPolicyUri,SecurityMode,UserTokenType, l’URI de l’application et les chaînes produit. - Énumérez les espaces de noms afin de pouvoir résoudre les NodeIds spécifiques au fournisseur ; exploitez les collisions d’espaces de noms pour pousser les clients à charger des schémas contrôlés par l’attaquant.
- Parcourir l’espace d’adresses
- Commencez par
ObjectsFolder (i=85)et utilisez récursivementBrowse/Readpour trouver des variables de processus modifiables, des nœudsMethodet des nœuds historien/journal. - Interrogez
ServerStatus.BuildInfopour comprendre la provenance du firmware, etServerCapabilities.OperationLimitspour évaluer la facilité à épuiser les ressources du serveur. - Si l’accès anonyme est autorisé, testez immédiatement
Callsur les méthodes de maintenance (par ex.,ns=2;s=Reset,ns=2;s=StartMotor). Beaucoup de fournisseurs oublient d’associer les permissions de rôle aux méthodes personnalisées.
- Abus de session
- Réutilisez ou clonez les valeurs
AuthenticationTokend’autres sessions (capturées via MITM ou exposition des diagnostics) pour détourner des subscriptions existantes. - Forcez le serveur dans un flood de
SessionDiagnosticsen créant des dizaines de sessions inactives ; certaines stacks plantent lorsque la limiteMaxSessionCountest dépassée.
Évaluation automatisée avec OpalOPC
- Le scanner peut s’exécuter de manière interactive ou headless, ce qui est pratique pour des baselines OT en style CI/CD. Poussez ses résultats lisibles par machine dans votre pipeline de reporting pour mettre en avant les logins anonymes, les politiques faibles, les erreurs de validation de certificat et les variables modifiables en quelques minutes.
- Combinez la sortie d’OpalOPC avec un parcours manuel : réinjectez la liste des endpoints découverts dans vos outils personnalisés, puis sélectionnez et exploitez de façon ciblée les nœuds à fort impact (par ex.,
MotorControl/StartStop,RecipeManager/Upload).
Attaquer les anciennes politiques de sécurité (Basic128Rsa15)
- Oracle de type Bleichenbacher : Les systèmes qui autorisent encore la politique dépréciée
Basic128Rsa15(souvent activée via des flags de build tels queCMPOPCUASTACK_ALLOW_SHA1_BASED_SECURITY) divulguent des différences de validation de padding. Exploitez cela en inondant les handshakesCreateSession/OpenSecureChannelavec des blobs PKCS#1 v1.5 spécialement conçus pour récupérer la clé privée du certificat serveur, puis usurper le serveur ou déchiffrer le trafic. - Contournement d’authentification : le stack .NET Standard de l’OPC Foundation antérieur à 1.5.374.158 (CVE-2024-42512) et les produits dépendants permettent à des attaquants non authentifiés de forcer cette politique legacy et ensuite de sauter l’authentification au niveau application. Une fois en possession des éléments de clé, vous pouvez présenter des
UserIdentityTokensarbitraires, rejouer des requêtesActivateSessionsignées, et opérer l’usine comme une station de travail d’ingénierie de confiance. - Flux opérationnel :
- Enumérez les politiques avec
GetEndpointset notez toute entréeBasic128Rsa15. - Négociez explicitement cette politique (
SecurityPolicyUridansCreateSession), puis lancez votre boucle d’oracle jusqu’à ce que la clé récupérée soit validée. - Exploitez la clé pour forger une session à haut privilège, changer de rôle, ou rétrograder silencieusement d’autres clients en agissant comme un reverse proxy malveillant.
- OPC Foundation a publié simultanément CVE-2024-42513 pour les bindings HTTPS. Même si votre cible prétend utiliser TLS, assurez-vous qu’elle ne retombe pas silencieusement sur Basic128Rsa15 pour le transport binaire derrière le proxy.
Création de clients OPC UA pour l’exploitation
- Clients personnalisés : des bibliothèques plug-and-play (python-opcua/asyncua, node-opcua, open62541) vous permettent d’implémenter votre propre logique d’exploitation. Imposer toujours l’index de namespace cible pour éviter des écritures inter-espaces de noms accidentelles quand les fournisseurs réordonnent les namespaces après des mises à jour de firmware.
- Checklist d’abus de nœuds :
HistoryReadsur des tags de production pour capturer des copies de recettes propriétaires.TranslateBrowsePathsToNodeIdspour résoudre des noms d’actifs lisibles par l’humain en NodeIds pouvant être fournis à des gadgets comme le framework de Claroty.Call+Methodnodes pour déclencher des tâches de maintenance (upload de firmware, calibration, redémarrages d’appareil).- Mauvaise utilisation de
RegisterNodespour épingler des nœuds fréquemment accédés puis priver les clients légitimes en ne libérant jamais les handles. - Tests de durcissement de session : tentez d’établir des dizaines d’abonnements avec des intervalles de publication extrêmement bas (inférieurs à 50 ms) et des files de monitored-item surdimensionnées. Beaucoup de stacks mal calculent
RevisedPublishingIntervalet plantent à cause de débordements de scheduler.
Fuzzing et outils de développement d’exploits
Claroty Team82 a publié un opcua-exploit-framework open-source qui regroupe des années de recherche de niveau Pwn2Own en modules réutilisables :
- Modes :
sanity(lectures/navigations légères),attacks(par ex., starvation du thread pool, DoS via upload de fichier),corpus(rejeu de payloads de fuzzing),server(serveur OPC UA rogue pour créer une backdoor sur des clients). - Pattern d’utilisation :
# Run a DoS attack against a Prosys Simulation Server endpoint
python3 main.py prosys 10.10.10.10 53530 /OPCUA/SimulationServer thread_pool_wait_starvation
# Replay an entire Boofuzz corpus against open62541
python3 main.py open62541 192.168.1.50 4840 / opcua_message_boofuzz_db input_corpus_minimized/opcua.db
- Scénario de serveur rogue : le serveur fourni basé sur asyncua vous permet de cibler des logiciels clients en servant des espaces d’adresses malveillants (par ex., des réponses avec des
ExtensionObjects surdimensionnés pour déclencher des bugs de parsing dans des clones de UA Expert). - Couverture des cibles : les profils intégrés couvrent Kepware, Ignition, Unified Automation, Softing SIS, Triangle Microworks, Node-OPCUA, Python OPC UA, Milo, open62541, etc., vous permettant de changer rapidement de stack sans réécrire les payloads.
- Conseils d’intégration : enchaînez sa sortie avec vos propres fuzzers — pulvérisez d’abord les payloads du
corpus, puis laissez OpalOPC revérifier si le crash a fait réapparaître des configurations par défaut peu sûres (login anonyme, accès écriture aux setpoints, etc.).
Exploitation des contournements d’authentification
Si des vulnérabilités de contournement d’authentification sont trouvées, vous pouvez configurer un OPC UA client en conséquence et voir ce auquel vous avez accès. Cela peut permettre tout, depuis la simple lecture de valeurs de process jusqu’à l’exploitation d’équipements industriels lourds.
Pour avoir une idée de l’appareil auquel vous avez accès, lisez les valeurs du nœud “ServerStatus” dans l’espace d’adresses et recherchez un manuel d’utilisation sur Google.
Shodan
port:4840port:62541 "OPC UA"ssl:"urn:opcua"product:"opc ua"
Combinez la recherche avec des chaînes fournisseurs ("Ignition OPC UA", "KepServerEX") ou des certificats ("CN=UaServerCert") pour prioriser les assets à haute valeur avant de commencer des tests intrusifs.
Références
- https://opalopc.com/how-to-hack-opc-ua/
- https://github.com/claroty/opcua-exploit-framework
- https://certvde.com/en/advisories/VDE-2025-022/
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d’abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez-nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépôts github.
HackTricks

