4840 - Pentesting OPC UA
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Базова інформація
OPC UA, що означає Open Platform Communications Unified Access, є критично важливим open-source протоколом, який використовується в різних галузях, таких як Manufacturing, Energy, Aerospace та Defence для обміну даними та управління обладнанням. Він унікально дозволяє обладнанню від різних vendor-ів взаємодіяти, особливо з PLC.
Його конфігурація дозволяє застосовувати сильні заходи безпеки, але часто для сумісності зі старішими пристроями ці заходи послаблюють, що відкриває системи для ризиків. Додатково, пошук OPC UA сервісів може бути складним, оскільки network scanners можуть їх не виявити, якщо вони працюють на нестандартних портах.
Порт за замовчуванням: 4840 (binary opc.tcp). Багато vendor-ів експонують окремі discovery endpoints (/discovery), HTTPS bindings (4843/443), або vendor-specific listener порти, такі як 49320 (KepServerEX), 62541 (OPC Foundation reference stack) та 48050 (UaGateway). Очікуйте кілька endpoints на хост, кожен з яких рекламує transport profile, security policy та user-token support.
| Built-in NodeId | Чому це важливо |
|---|---|
i=2253 (0:Server) | Містить ServerArray, рядки постачальника/продукту та URI просторів імен. |
i=2256 (ServerStatus) | Показує uptime, поточний стан та, опціонально, build info. |
i=2267 (ServerDiagnosticsSummary) | Показує кількість сесій, перерваних запитів тощо. Чудово підходить для fingerprinting спроб brute-force. |
i=85 (ObjectsFolder) | Точка входу для обходу відкритих тегів пристрою, methods та alarms. |
PORT STATE SERVICE REASON
4840/tcp open unknown syn-ack
Pentesting OPC UA
Щоб виявити проблеми безпеки в серверах OPC UA, проскануйте їх за допомогою OpalOPC.
opalopc -vv opc.tcp://$target_ip_or_hostname:$target_port
Плейбук виявлення та енумерації
- Знайти всі OPC UA транспорти
nmap -sV -Pn -n --open -p 4840,4843,49320,48050,53530,62541 $TARGET
Повторіть для UDP групових адрес, якщо середовище використовує LDS-ME мультикаст-виявлення.
- Фінгерпринт кінцевих точок
- Виконайте
FindServers/GetEndpointsпо кожному транспорту, щоб зафіксуватиSecurityPolicyUri,SecurityMode,UserTokenType, application URI та product рядки. - Перелічіть простори імен, щоб можна було розв’язати vendor-specific
NodeIds; зловживайте колізіями просторів імен, щоб примусити клієнтів завантажувати схеми, контрольовані атакуючим.
- Огляд адресного простору
- Почніть з
ObjectsFolder (i=85)і рекурсивноBrowse/Read, щоб знайти записувані змінні процесу,Methodвузли та вузли історії/журналу. - Запитайте
ServerStatus.BuildInfo, щоб зрозуміти походження прошивки, іServerCapabilities.OperationLimits, щоб оцінити, наскільки легко вичерпати ресурси сервера. - Якщо дозволено анонімний доступ, негайно протестуйте
Callна сервісних методах (наприклад,ns=2;s=Reset,ns=2;s=StartMotor). Багато вендорів забувають прив’язувати права ролей до кастомних методів.
- Зловживання сесіями
- Повторно використовуйте або клонувати значення
AuthenticationTokenз інших сесій (захоплені через MITM або розкриття діагностики), щоб захопити існуючі підписки. - Примусьте сервер до затоплення
SessionDiagnostics, створивши десятки неактивних сесій; деякі стеки падають, коли перевищено лімітMaxSessionCount.
Автоматизована оцінка з OpalOPC
- Сканер може працювати інтерактивно або у headless-режимі, що зручно для CI/CD-типових OT baseline. Пропустіть його машинно-зрозумілі знахідки у ваш pipeline звітності, щоб за хвилини висвітлити anonymous logins, слабкі політики, помилки валідації сертифікатів і записувані змінні.
- Поєднуйте вивід OpalOPC з ручним переглядом: подайте список знайдених endpoint назад у ваші кастомні інструменти, а потім вибірково озброюйте вузли з високим впливом (наприклад,
MotorControl/StartStop,RecipeManager/Upload).
Атака на застарілі політики безпеки (Basic128Rsa15)
- Bleichenbacher-style oracle: Системи, що досі дозволяють застарілу політику
Basic128Rsa15(часто вмикається через build flags, такі якCMPOPCUASTACK_ALLOW_SHA1_BASED_SECURITY) leak відмінності в валідації паддінга. Використовуйте це, затоплюючиCreateSession/OpenSecureChannelхендшейки підробленими PKCS#1 v1.5 блобами, щоб відновити приватний ключ сертифіката сервера, після чого можна видати себе за сервер або дешифрувати трафік. - Authentication bypass: .NET Standard стек OPC Foundation до версії 1.5.374.158 (CVE-2024-42512) та залежні продукти дозволяють неавторизованим нападникам примусити ту застарілу політику і, як наслідок, пропустити автентифікацію на рівні додатку. Отримавши ключовий матеріал, можна пред’являти довільні
UserIdentityTokens, відтворювати підписаніActivateSessionзапити та оперувати заводом як довірена інженерна робоча станція. - Операційний робочий процес:
- Перелічіть політики за допомогою
GetEndpointsі помітте будь-які записиBasic128Rsa15. - Узгодьте явно цю політику (
SecurityPolicyUriвCreateSession), потім запустіть ваш oracle цикл до тих пір, поки відновлений ключ не валідується. - Зловживайте ключем для підробки сесії з високими привілеями, зміни ролей або тихого пониження інших клієнтів, виступаючи як злочинний зворотний проксі.
- CODESYS Runtime Toolkit (<3.5.21.0) повторно вмикав Basic128Rsa15 коли інтегратори компілювали з
CMPOPCUASTACK_ALLOW_SHA1_BASED_SECURITY. Вимкніть цей прапор, знову запустіть workflow oracle вищевказаний, і ви можете leak приватний ключ runtime, щоб видавати себе за довірені інженерні робочі станції до тих пір, поки не буде застосовано патч рівня 3.5.21.0 або новіший. - OPC Foundation одночасно опублікувала CVE-2024-42513 для HTTPS bindings. Навіть якщо ваша ціль заявляє TLS, переконайтесь, що вона не тихо відкатується до Basic128Rsa15 для бінарного транспорту за проксі.
Watchlist експлойтів 2024–2025
- open62541 fuzz_binary_decode (CVE-2024-53429): SecureChannel чанки, що заявляють надмірні тіла
ExtensionObject, змушують декодер звертатися до звільненої пам’яті, тому pre-auth нападник може багаторазово крашити UA сервери, що інкапсулюють open62541 ≤1.4.6. Повторно використовуйте Claroty corpus (opcua_message_boofuzz_db) або створіть власний Boofuzz harness, щоб спамити змутованіOpenSecureChannelзапити, доки watchdog не вб’є процес, після чого повторно перелічіть, бо багато інтеграторів після перезавантаження повертаються до anonymous mode. - Softing OPC UA C++ SDK / edgeConnector / edgeAggregator (CVE-2025-7390): TLS pipeline клієнта приймає будь-який сертифікат, що реплеїть довірений Common Name, тож ви можете випустити тимчасовий сертифікат, скопіювати CN з інженера заводу і залогінитись з довільними
UserNameIdentityTokenабоIssuedIdentityTokenданими. Поєднайте це з пониженням до Basic128Rsa15, щоб позбутися перевірок цілісності і постійно видавати себе за операторів, поки trustlists не будуть перебудовані.
Створення OPC UA клієнтів для експлуатації
- Custom clients: Drop-in бібліотеки (python-opcua/asyncua, node-opcua, open62541) дозволяють вам реалізувати логіку експлойту самостійно. Завжди примусово застосовуйте індекс вашого цільового простору імен, щоб уникнути випадкових записів у інші простори імен, коли вендори переструктурують простори після оновлень прошивки.
- Чекліст зловживань вузлами:
HistoryReadна production тегах для зняття знімку пропрієтарних рецептів.TranslateBrowsePathsToNodeIdsдля перетворення людейносприйнятних імен активів у NodeIds, які можна подати до гаджетів, як-от Claroty’s framework.Call+Methodвузли, щоб тригернути сервісні задачі (завантаження прошивки, калібрування, перезавантаження пристрою).RegisterNodesнеправильне використання, щоб закріпити часто використовувані вузли і потім виснажити легітимні клієнти, ніколи не звільняючи хендли.- Тести жорсткості сесій: Спробуйте зв’язати десятки підписок з надзвичайно низькими publishing intervals (нижче 50 ms) плюс надмірно великі черги monitored-item. Багато стеків неправильно розраховують
RevisedPublishingIntervalі падають через переповнення планувальника.
Fuzzing та інструменти розробки експлойтів
Claroty Team82 випустила open-source opcua-exploit-framework, який пакує роки досліджень рівня Pwn2Own у повторно використовувані модулі:
- Режими:
sanity(легкі reads/browses),attacks(наприклад, starvation thread pool, file upload DoS),corpus(replay fuzzing payloads),server(зловмисний OPC UA сервер для підсадки клієнтів). - Сценарій використання:
# 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
- Сценарій зловмисного сервера: Вбудований asyncua-based server дозволяє таргетувати клієнтське ПЗ, подаючи шкідливі адресні простори (наприклад, відповіді з надмірними
ExtensionObjectщоб тригернути parsing bugs в UA Expert клонах). - Покриття цілей: Вбудовані профілі відповідають Kepware, Ignition, Unified Automation, Softing SIS, Triangle Microworks, Node-OPCUA, Python OPC UA, Milo, open62541 тощо, тож ви можете швидко переключатися між стеками без переписування payloads.
- Поради з інтеграції: Зв’яжіть його вивід з вашими фуззерами — спочатку росять
corpuspayloads, потім дозвольте OpalOPC перевірити, чи краш не воскресив insecure defaults (anonymous login, setpoint write access тощо).
Використання bypass-ів автентифікації
Якщо знайдені вразливості bypass автентифікації, ви можете сконфігурувати OPC UA client відповідно і побачити, до чого маєте доступ. Це може дозволити як просте читання значень процесу, так і фактичне управління важким промисловим обладнанням.
Щоб отримати уявлення про пристрій, до якого ви маєте доступ, прочитайте значення вузла “ServerStatus” в адресному просторі і google для інструкції з експлуатації.
Shodan
port:4840port:62541 "OPC UA"ssl:"urn:opcua"product:"opc ua"
Комбінуйте пошук з vendor рядками ("Ignition OPC UA", "KepServerEX") або сертифікатами ("CN=UaServerCert"), щоб пріоритезувати цінні активи перед початком інвазивного тестування.
References
- https://opalopc.com/how-to-hack-opc-ua/
- https://github.com/claroty/opcua-exploit-framework
- https://certvde.com/en/advisories/VDE-2025-022/
- https://nvd.nist.gov/vuln/detail/CVE-2024-53429
- https://industrial.softing.com/fileadmin/psirt/downloads/2025/CVE-2025-7390.html
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


