4840 - Pentesting OPC UA
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Temel Bilgiler
OPC UA, açılımı Open Platform Communications Unified Access, veri değişimi ve ekipman kontrolü için İmalat, Enerji, Havacılık ve Savunma gibi çeşitli endüstrilerde kullanılan kritik bir açık kaynak protokolüdür. Özellikle farklı satıcıların ekipmanlarının, özellikle PLC’lerin birbirleriyle iletişim kurmasını sağlar.
Yapılandırması güçlü güvenlik önlemlerine izin verse de, genellikle eski cihazlarla uyumluluk için bu önlemler azaltılır ve sistemleri risklere maruz bırakır. Ayrıca, OPC UA servislerini bulmak zor olabilir çünkü ağ tarayıcıları standart dışı portlardaysa bunları tespit etmeyebilir.
Varsayılan port: 4840 (ikili opc.tcp). Birçok satıcı ayrı discovery endpoint’leri (/discovery), HTTPS binding’leri (4843/443) veya vendor-specific listener portları (ör. 49320 (KepServerEX), 62541 (OPC Foundation reference stack) ve 48050 (UaGateway)) açar. Her host için birden fazla endpoint bekleyin; her biri transport profile, security policy ve user-token desteğini ilan eder.
| Built-in NodeId | Why it matters |
|---|---|
i=2253 (0:Server) | İçinde ServerArray, vendor/product dizeleri ve namespace URI’lerini tutar. |
i=2256 (ServerStatus) | Çalışma süresini (uptime), mevcut durumu ve isteğe bağlı olarak build bilgisini ortaya çıkarır. |
i=2267 (ServerDiagnosticsSummary) | Oturum sayıları, aborted requests vb. gösterir. Brute-force denemeleri için fingerprinting yapmak açısından çok faydalıdır. |
i=85 (ObjectsFolder) | Açığa çıkmış cihaz etiketlerini, yöntemleri ve alarmları gezmek için giriş noktası. |
PORT STATE SERVICE REASON
4840/tcp open unknown syn-ack
Pentesting OPC UA
OPC UA sunucularındaki güvenlik sorunlarını ortaya çıkarmak için OpalOPC ile tarayın.
opalopc -vv opc.tcp://$target_ip_or_hostname:$target_port
Keşif & Sınıflama Oyun Planı
- Tüm OPC UA taşıma katmanlarını bulun
nmap -sV -Pn -n --open -p 4840,4843,49320,48050,53530,62541 $TARGET
Ortam LDS-ME multicast discovery kullanıyorsa UDP grup adreslerinde tekrar edin.
- Uç noktaları fingerprint edin
- Her taşıma üzerinde
FindServers/GetEndpointsçağırarakSecurityPolicyUri,SecurityMode,UserTokenType, application URI ve product stringlerini yakalayın. - Vendor-spesifik NodeId’leri çözebilmek için namespace’leri listeleyin; namespace çakışmalarını suistimal ederek istemcilerin saldırgan-kontrollü schema’ları yüklemesini sağlayın.
- Adres alanında gezinme
ObjectsFolder (i=85)’ten başlayın ve yazılabilir process değişkenleri,Methoddüğümleri ve historian/log düğümlerini bulmak için özyinelemeli olarakBrowse/Readyapın.- Firmware kökenini anlamak için
ServerStatus.BuildInfosorgulayın ve sunucu kaynaklarını tüketmenin ne kadar kolay olduğunu ölçmek içinServerCapabilities.OperationLimits’i kontrol edin. - Eğer anonymous access izinliyse, hemen bakım method’ları üzerinde
Calltestleri yapın (ör.ns=2;s=Reset,ns=2;s=StartMotor). Birçok vendor custom method’lara rol izinlerini bağlamayı unutur.
- Session suistimali
- Diğer oturumlardan (MITM veya diagnostic sızıntılarıyla yakalanmış)
AuthenticationTokendeğerlerini yeniden kullanın veya klonlayın ve mevcut subscription’ları ele geçirin. - Sunucuyu
SessionDiagnosticsflooding’e zorlayarak onlarca inaktif session oluşturun; bazı stack’lerMaxSessionCountlimiti aşıldığında çöküyor.
OpalOPC ile otomatik değerlendirme
- Scanner interaktif veya headless çalışabilir; bu, CI/CD tarzı OT bazeline almak için kullanışlıdır. Makine-okunabilir bulgularını raporlama hattınıza pipe’layarak anonymous loginler, zayıf policy’ler, certificate validation hataları ve yazılabilir değişkenleri dakikalar içinde vurgulayın.
- OpalOPC çıktısını manuel browsing ile birleştirin: keşfedilmiş endpoint listesini kendi tooling’inize geri verin, sonra yüksek etkili düğümleri seçici şekilde weaponize edin (ör.
MotorControl/StartStop,RecipeManager/Upload).
Legacy security policy’lerine saldırmak (Basic128Rsa15)
- Bleichenbacher-style oracle: Hâlâ deprecated
Basic128Rsa15policy’sine izin veren sistemler (çoğunluklaCMPOPCUASTACK_ALLOW_SHA1_BASED_SECURITYgibi build flag’lerle açılır) padding doğrulama farklarını leak eder. Sunucu sertifikasının private key’ini geri kazanmak için crafted PKCS#1 v1.5 blob’larlaCreateSession/OpenSecureChannelel sıkışmalarını flood edin; sonra server’ı taklit edebilir veya trafiği deşifre edebilirsiniz. - Authentication bypass: OPC Foundation’ın .NET Standard stack’i 1.5.374.158 öncesi (CVE-2024-42512) ve ona bağlı ürünler, yetkilendirilmemiş saldırganların bu legacy policy’yi zorlamasına ve uygulama-seviyesinde authentication’ı atlamasına izin veriyordu. Anahtar materyalini ele geçirdiğinizde rastgele
UserIdentityTokenssunabilir, imzalıActivateSessionisteklerini replay edebilir ve plant’ı trusted engineering workstation olarak kullanabilirsiniz. - Operasyonel iş akışı:
GetEndpointsile policy’leri enumerate edin ve herhangi birBasic128Rsa15girişi not alın.- O policy ile açıkça pazarlık edin (
SecurityPolicyUri’yiCreateSession’de belirtin), ardından ORACLE döngünüzü çalıştırıp anahtar doğrulanana kadar devam edin. - Anahtarı kötüye kullanarak yüksek-izinli bir session sahteleyin, rolleri değiştirin veya rogue reverse proxy olarak diğer istemcileri sessizce downgrade edin.
- CODESYS Runtime Toolkit (<3.5.21.0) integratörler
CMPOPCUASTACK_ALLOW_SHA1_BASED_SECURITYile derlediğinde Basic128Rsa15’i yeniden etkinleştiriyordu. O flag’i çevirin, yukarıdaki oracle iş akışını yeniden çalıştırın ve runtime’ın private key’ini sızdırarak trusted engineering workstation’ları taklit edebilirsiniz; bu, 3.5.21.0 veya daha yeni patch uygulanana kadar geçerlidir. - OPC Foundation eş zamanlı olarak HTTPS binding’leri için CVE-2024-42513 yayımladı. Hedefiniz TLS iddia etse bile, binary transport için proxy arkasında Basic128Rsa15’e sessizce geri düşmediğinden emin olun.
2024-2025 exploit takip listesi
- open62541 fuzz_binary_decode (CVE-2024-53429): Oversized
ExtensionObjectbody’leri bildiren SecureChannel chunk’ları decoder’ın freed memory’yi dereference etmesine neden oluyor; böylece pre-auth bir saldırgan open62541 ≤1.4.6 içeren UA server’ları tekrar tekrar crash edebilir. Claroty corpus (opcua_message_boofuzz_db)’u yeniden kullanın veya kendi Boofuzz harness’inizi yazıp mutate edilmişOpenSecureChannelistekleri ile spamleyin; watchdog process’i öldürün, sonra yeniden enumerate edin çünkü birçok integratör reboot sonrası anonymous mode’a geri düşüyor. - Softing OPC UA C++ SDK / edgeConnector / edgeAggregator (CVE-2025-7390): TLS client-auth pipeline’ı, trusted bir Common Name’i replay eden herhangi bir sertifikayı kabul ediyor; bu yüzden disposable bir sertifika düzenleyip bir plant engineer’ın CN’sini kopyalayarak rastgele
UserNameIdentityTokenveyaIssuedIdentityTokenverileriyle giriş yapabilirsiniz. Bunu Basic128Rsa15’e downgrade ile eşleştirerek integrite kontrollerini ortadan kaldırıp operator’ları persistent şekilde taklit edebilirsiniz ta ki trustlist’ler yeniden oluşturulana kadar.
Exploit için OPC UA client’ları hazırlama
- Custom clients: Drop-in kütüphaneler (python-opcua/asyncua, node-opcua, open62541) exploit mantığını kendiniz yönetmenize izin verir. Firmware güncellemeleri sonrası vendor’ların namespace’leri yeniden sıralaması durumunda kazara cross-namespace yazmaları önlemek için hedef namespace index’ini her zaman zorunlu kılın.
- Node suistimali kontrol listesi:
- Üretim tag’leri üzerinde
HistoryReadile proprietary recipe’lerin snapshot’unu alın. - İnsan okunur varlık isimlerini NodeId’lere çevirmek için
TranslateBrowsePathsToNodeIdskullanın; bunları Claroty gibi gadget’lara besleyebilirsiniz. - Bakım görevlerini tetiklemek için
Call+Methoddüğümlerini kullanın (firmware upload, kalibrasyon, cihaz reboot’ları). - Sık erişilen düğümleri pinlemek için
RegisterNodes’u yanlış kullanarak tutun ve sonra handle’ları hiç bırakmayarak meşru istemcileri açlığa düşürün. - Session sertleştirme testleri: Çok düşük publishing interval’ları (50 ms’nin altında) ve oversized monitored-item queue’ları ile onlarca subscription bağlamayı deneyin. Birçok stack
RevisedPublishingInterval’ı yanlış hesaplıyor ve scheduler overflow nedeniyle çöküyor.
Fuzzing & exploit geliştirme araçları
Claroty Team82, yılların Pwn2Own düzeyindeki araştırmalarını yeniden kullanılabilir modüller halinde paketleyen açık kaynaklı bir opcua-exploit-framework yayımladı:
- Modlar:
sanity(hafif read/browse),attacks(ör. thread pool starvation, file upload DoS),corpus(replay fuzzing payload’ları),server(istemcileri backdoorlamak için rogue OPC UA server). - Kullanım örüntüsü:
# 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
- Rogue server senaryosu: Paketlenmiş asyncua-tabanlı server, istemci yazılımlarını hedeflemenize izin verir; örneğin UA Expert klonlarındaki parsing bug’larını tetiklemek için oversized
ExtensionObjectyanıtları sunmak gibi kötü amaçlı address space’ler servis edebilirsiniz. - Hedef kapsamı: Dahili profiller Kepware, Ignition, Unified Automation, Softing SIS, Triangle Microworks, Node-OPCUA, Python OPC UA, Milo, open62541 vb.’ye eşlenir; böylece payload’ları yeniden yazmadan stack’ler arasında hızla geçiş yapabilirsiniz.
- Entegrasyon ipuçları: Çıktısını kendi fuzzer’larınızla zincirleyin—önce
corpuspayload’larını spray’leyin, sonra OpalOPC ile çöküşün insecure default’ları (anonymous login, setpoint write access vb.) tekrar ortaya çıkarıp çıkarmadığını doğrulatın.
Authentication bypass’ları sömürme
Eğer authentication bypass zafiyetleri bulunursa, uygun şekilde yapılandırılmış bir OPC UA client ile neye erişebildiğinizi görebilirsiniz. Bu, sadece process değerlerini okumaktan ağır sanayi ekipmanlarını bizzat işletmeye kadar her şeyi mümkün kılabilir.
Eriştiğiniz cihaz hakkında bir fikir edinmek için address space’te “ServerStatus” node değerlerini okuyun ve kullanım kılavuzu için Google’da arama yapın.
Shodan
port:4840port:62541 "OPC UA"ssl:"urn:opcua"product:"opc ua"
Aramayı vendor string’leri ("Ignition OPC UA", "KepServerEX") veya certificate’lar ("CN=UaServerCert") ile birleştirerek intrusive testlere başlamadan önce yüksek-değerli varlıkları önceliklendirin.
Referanslar
- 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’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
HackTricks

