.NET客户端CSV解析程序可被dotpeek利用的漏洞添加方案咨询
可被DotPeek利用的.NET CSV解析漏洞思路
1. 无校验的数组越界写入
你现在读取CSV需要预先指定元素数量,假设代码里直接用这个数初始化数组,然后循环把拆分后的CSV元素往里塞,完全不检查元素数量是否超过数组长度。DotPeek反编译后一眼就能看到这个无检查的赋值逻辑,攻击者只要构造一行元素数超过指定数量的CSV,就能触发数组越界异常,极端情况还可能破坏内存。
- 反编译后可见的风险代码:
string[] values = new string[predefinedColumnCount]; string[] splitLine = line.Split(','); for(int i=0; i<splitLine.Length; i++) { values[i] = splitLine[i]; // 没有任何越界判断 }
2. 硬编码敏感信息
在解析逻辑里加个硬编码的测试用敏感值,比如测试API密钥、数据库连接串。DotPeek反编译后能直接看到这些明文内容,攻击者拿到后就能伪造合法CSV或者调用相关服务。
- 风险代码示例:
private static readonly string TestApiKey = "sk_test_1234567890abcdef"; // 解析时用这个密钥验证测试CSV if (ValidateCsvSignature(line, TestApiKey)) { // 处理逻辑 }
3. 未过滤的注入风险
如果解析后的CSV内容直接用来拼接SQL语句或者本地文件路径,而且完全不做特殊字符过滤,DotPeek反编译后能看到这种裸奔的拼接逻辑,攻击者构造恶意CSV就能触发注入攻击。
- SQL注入风险代码:
string sql = $"INSERT INTO Data VALUES ('{values[0]}', '{values[1]}')"; SqlCommand cmd = new SqlCommand(sql, connection); cmd.ExecuteNonQuery(); - 利用方式:把CSV元素写成
'); DROP TABLE Data; --,执行时直接删除数据库表。
4. 强制类型转换无校验
读取CSV时直接把字符串强转成数值类型,完全不检查格式是否合法。DotPeek反编译后能看到这种粗暴的转换逻辑,攻击者构造非数值的CSV元素,就能让程序崩溃或者抛出异常。
- 风险代码:
int id = int.Parse(values[0]); // 不管字符串是不是数字直接转换
5. 路径遍历漏洞
如果解析逻辑允许从CSV内容里读取子文件路径,而且直接拼接到程序目录下,不做路径校验。DotPeek反编译后能看到这个路径拼接逻辑,攻击者构造包含../的CSV元素,就能读取程序目录外的敏感文件,比如配置文件。
- 风险代码:
string subFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, values[0]); string subContent = File.ReadAllText(subFilePath); - 利用方式:把CSV元素写成
../appsettings.json,直接读取程序的配置文件。
内容的提问来源于stack exchange,提问作者Sai Ganesh K
相关产品推荐
相关产品推荐

