🇰🇷 한글 설명
FastNetMon Community Edition 1.2.9 이하의 Juniper 라우터 통합 플러그인 _log() 함수에서 $msg 파라미터를 입력 검증 없이 shell 명령어에 직접 연결하여 OS command injection 취약점이 존재한다. 공격자는 명령줄 인수(argv[1-3])를 통해 임의의 시스템 명령을 주입하여 실행할 수 있다.
💡 쉬운 설명
FastNetMon 소프트웨어의 네트워크 플러그인이 사용자 입력을 안전하게 확인하지 않아서, 악의적인 명령어를 숨겨서 전달할 수 있습니다. 공격자가 이를 악용하면 서버에서 원하는 명령을 실행할 수 있습니다.
🇺🇸 원문 (English)
FastNetMon Community Edition through 1.2.9 contains an OS command injection vulnerability in the Juniper router integration plugin. The _log() function in src/juniper_plugin/fastnetmon_juniper.php (lines 117-118) constructs shell commands by concatenating the $msg parameter directly into exec() calls: exec("echo `date` \"- {FASTNETMON] - " . $msg . " \" >> " . $FILE_LOG_TMP). The $msg variable contains unsanitized data derived from command-line arguments argv[1] through argv[3], which represent the attack IP address, direction, and power. While FastNetMon's C++ core currently passes IP addresses via inet_ntoa() (which only produces safe dotted-decimal notation), the PHP script performs no input validation or shell escaping. If the script is invoked directly, by another orchestration system, or if future code changes pass string-sourced IPs, arbitrary commands can be injected. The correct fix is to replace exec() with file_put_contents() or use escapeshellarg() on all parameters.
📍 영향받는 시스템
FastNetMon Community Edition version ≤ 1.2.9 with Juniper router integration plugin
⚔️ 공격 벡터
Direct injection of arbitrary commands via command-line arguments (attack IP, direction, power) passed unsanitized to exec() in _log() function
🛡️ 대응 방법
Upgrade to patched version or replace exec() with file_put_contents(), or apply escapeshellarg() to all parameters before exec()
🔧 검증 코드
FastNetMon이 설치되어 있고 버전이 1.2.9 이하라면 취약점이 있으며, 1.3.0 이상이거나 설치되지 않았다면 안전하다.
fastnetmon --version 2>/dev/null || dpkg -l 2>/dev/null | grep fastnetmon