WAGO PFC 200 Series Authentication Bypass
Posted on 04 December 2017
SEC Consult Vulnerability Lab Security Advisory < 20171130-0 > ======================================================================= title: Critical CODESYS vulnerabilities product: WAGO PFC 200 Series, see "Vulnerable / tested versions" vulnerable version: plclinux_rt 2.4.7.0, see "Vulnerable / tested versions" fixed version: PFC200 FW11 CVE number: - impact: critical homepage: https://www.codesys.com found: 2017-07-28 by: T. Weber (Office Vienna) SEC Consult Vulnerability Lab An integrated part of SEC Consult Bangkok - Berlin - Linz - Luxembourg - Montreal - Moscow Kuala Lumpur - Singapore - Vienna (HQ) - Vilnius - Zurich https://www.sec-consult.com ======================================================================= Vendor description: ------------------- "The WAGO-I/O-SYSTEM is a flexible fieldbus-independent solution for decentralized automation tasks. With the relay, function and interface modules, as well as overvoltage protection, WAGO provides a suitable interface for any application." Source: http://global.wago.com/en/products/product-catalog/ components-automation/overview/index.jsp "The PFC family of controllers offers advanced compact, computing power for PLC programming and process visualization. Programmable in accordance with IEC 61131-3 600, PFC controllers feature a 600 MHz ARM Cortex A8 processor that offers high speed processing and support of 64 bit variables." Source: http://www.wago.us/products/components-for-automation/modular-io-system-series-750-753/programmable-fieldbus-controller/pfc200/index.jsp Business recommendation: ------------------------ Because of the use in industrial and safety-critical environments the patch has to be applied as soon as it is available. We explicitly point out to all users in this sector that this device series in the mentioned device series with firmware 02.07.07(10) should not be connected directly to the internet (or even act as gateway) since it is very likely that an attacker can compromise the whole network via such an device. SEC Consult recommends not to use this product in a production environment until a thorough security review has been performed by security professionals. Vulnerability overview/description: ----------------------------------- The "plclinux_rt" service accepts different unauthenticated actions. This vulnerability contains the architectural security problems described by Reid Wightman. The SDK of "plclinux_rt" is written by the same vendor (3S). Therefore, the file commands of "Digital Bond's 3S CODESYS Tools", created around 2012 are applicable. (See https://ics-cert.us-cert.gov/advisories/ICSA-13-011-01) The CODESYS command-line is protected with login credentials, that's why the shell of the mentioned tools does not provide root access out of the box. But after some investigation it was clear that there are further functions which are reachable without using the command-line and without any authentication. These functions in "plclinux_rt" can be triggered by sending the correct TCP payload on the bound port (by default 2455). Some of the triggerable functions are: * Arbitrary file read/write/delete (also covered by "Digital Bond's Tools") * Step over a function in the currently executed PLC program * Cycle step any function in the currently executed PLC program * Delete the current variable list of the currently executed PLC program * And more functions... Since SSH is activated by default, an unauthenticated attacker can rewrite "/etc/shadow" and gain root privileges easily via these attack vectors! 1) Critical Improper Authentication / Design Issue Files can be fetched, written and deleted. Running tasks on the PLC can be restarted, stepped and crashed. An attacker can therefore replace the password hash in the shadow file. A memory corruption (and potential reverse-shell) is also possible via arbitrary TCP packets. There are potentially more commands which can be triggered, but this was not covered by the short security crash test. Proof of concept: ----------------- As there is no patch available yet, the detailed proof of concept information has been removed from this advisory. 1) Critical Improper Authentication / Design Issue Two payloads are specified here as proof of concept for file manipulation. Four payloads for live program manipulation are also listed. File read and delete without any authentication. Read "/etc/shadow": echo '[PoC removed]' | xxd -r -p | nc <PLC-IP> <Port> Delete "/etc/test": echo '[PoC removed]' | xxd -r -p | nc <PLC-IP> <Port> Runnning PLC tasks could be modified with the following payloads: Step over function: echo '[PoC removed]' | xxd -r -p | nc <PLC-IP> <Port> Cycle step function: echo '[PoC removed]' | xxd -r -p | nc <PLC-IP> <Port> Delete variable list (produces stack-trace / denial of service): echo '[PoC removed]' | xxd -r -p | nc <PLC-IP> <Port> The actual function is chosen by the 7th byte in the latter payloads. E.g.: 0x31 -> read file 0x36 -> delete file 0x0a -> step over 0x24 -> cycle step 0x15 -> delete variable list There are much more functions hidden in the "plclinux_rt" binary. This is just an excerpt of a few available functions. These functions can be examined from "SrvComputeService". Two pseudo code snippets generated by IDA Pro shows some examples (the functionality can be quickly determined from the corresponding debug message): [PoC removed from this advisory] Vulnerable / tested versions: ----------------------------- WAGO PFC200 Series / Firmware 02.07.07(10) (17 affected devices) 750-8202 750-8202/025-000 750-8202/025-001 750-8202/025-002 750-8202/040-001 750-8203 750-8203/025-000 750-8204 750-8204/025-000 750-8206 750-8206/025-000 750-8206/025-001 750-8207 750-8207/025-000 750-8207/025-001 750-8208 750-8208/025-000 The WAGO contact stated during a call that all PLCs of the 750-88X Series are not vulnerable due to a custom fix from WAGO. The contact also stated that the PLCs of the 750-810X (PFC100) series are also not vulnerable because they have CODESYS 3.5 deployed. Devices of any other vendor which use the CODESYS 2.3.X/2.4.X runtime are potentially prone to the same vulnerability. Vendor contact timeline: ------------------------ 2017-08-02: Contacting vendor through info@wago.com and set the publication date to 2017-09-21. 2017-08-09: Sending a reminder to info@wago.com 2017-08-16: Found a dedicated security contact of WAGO. Contacting this employee via e-mail. 2017-08-17: Contact responds that he will read the redirected e-mail from info@wago.com. Sending e-mail to contact that the message sent to info@wago.com does not contain the actual advisory and that an encrypted channel should be used for transmission. 2017-08-22: Sending reminder to contact and re-transmitting the responsible disclosure policy and all possible ways to transmit the advisory. 2017-08-29: Uploading advisory to WAGO ShareFile. 2017-09-15: Telephone call with WAGO contact. Discussion about the vulnerability. Fix will be available in the next firmware version. Vendor clarified that series 750-88X is not prone to the reported vulnerability. Set the publication date to 2017-09-28. 2017-09-26: Telephone call with vendor. Vendor is working on a fix of the vulnerabilities. Set the publication date to 2017-10-12. 2017-10-06: Sending a reminder to the vendor; No answer. 2017-10-11: Sending a reminder to the vendor. Vendor states that they are working on an update and a timeline for the fix will be provided on 2017-10-13. 2017-10-13: Asked for an update; No answer. 2017-10-17: Informing the vendor that the publication date was set to 2017-10-23. 2017-10-19: Vendor responds that vulnerability in PFC200 series will be patched in firmware version FW12. Set publication date to 2017-10-27 and asked the vendor for a time-line regarding the PFC100 series. 2017-10-20: Vendor responds that PFC100 series is not vulnerable since it does not contain CODESYS 2.4 run-time. Vendor corrected the firmware to version FW11. The patch will be available in January 2018. 2017-10-30: Informed vendor that the advisory will be published on 2017-11-30. 2017-11-30: Advisory release Solution: --------- Update your WAGO PFC200 Series to firmware version FW11 as soon as it is available. In the meantime, see the workaround section. Workaround: ----------- Delete "plclinux_rt" or close the programming port (2455). Network access to the device should be restricted. Advisory URL: ------------- https://www.sec-consult.com/en/vulnerability-lab/advisories/index.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SEC Consult Vulnerability Lab SEC Consult Bangkok - Berlin - Linz - Luxembourg - Montreal - Moscow Kuala Lumpur - Singapore - Vienna (HQ) - Vilnius - Zurich About SEC Consult Vulnerability Lab The SEC Consult Vulnerability Lab is an integrated part of SEC Consult. It ensures the continued knowledge gain of SEC Consult in the field of network and application security to stay ahead of the attacker. The SEC Consult Vulnerability Lab supports high-quality penetration testing and the evaluation of new offensive and defensive technologies for our customers. Hence our customers obtain the most current information about vulnerabilities and valid recommendation about the risk profile of new technologies. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Interested to work with the experts of SEC Consult? Send us your application https://www.sec-consult.com/en/career/index.html Interested in improving your cyber security with the experts of SEC Consult? Contact our local offices https://www.sec-consult.com/en/contact/index.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Mail: research at sec-consult dot com Web: https://www.sec-consult.com Blog: http://blog.sec-consult.com Twitter: https://twitter.com/sec_consult EOF T. Weber / @2017