CWE 73 错误 - Veracode 问题 -.net 应用程序



我一直在解决项目中Veracode扫描仪的任命问题。我创建了一个函数来验证文件,但它没有传入 veracode 扫描器;

这是我的函数的代码:

public static string GetSafeFileName(string fileNameToValidate)
{
fileNameToValidate= fileNameToValidate.Replace("'", "''").Replace(@"../", "").Replace(@"..", "");
char[] blackListChars = System.IO.Path.GetInvalidPathChars();
char[] blackListFilename = System.IO.Path.GetInvalidFileNameChars();
foreach (var invalidChar in blackListChars)
{
if (fileNameToValidate.Contains(invalidChar))
{
fileNameToValidate = fileNameToValidate.Replace(invalidChar, ' ').Trim();
}
}
string fullPath = Path.GetFullPath(fileNameToValidate);
string directoryName = Path.GetDirectoryName(fullPath);
string fileName = Path.GetFileName(fullPath);
foreach (var invalidChar in blackListFilename)
{
if (fileName.Contains(invalidChar))
{
fileName = fileName.Replace(invalidChar, ' ').Trim();
}
}
string finalPath = Path.Combine(directoryName, fileName);
return finalPath;
}

在Veracode扫描仪中修复cwe 73约会,我必须进行哪些更改?有人可以帮助我吗?

我的项目是在 .net 4.0 上运行的窗口窗体

谢谢

布鲁诺

您的问题是 Veracode 实际上并没有检测到您的代码在做什么,它会检测正在(或不)调用的清理器函数。如果您登录 Veracode 并在"支持的清理功能"上搜索帮助,您将找到以您的语言检测到的列表。

不幸的是,.Net 的列表不包括 CWE-73 的任何内容。

因此,您的解决方案是使用自定义清洁剂注释专门将您的函数标记为 CWE-73 的清洁剂。在 Veracode 帮助中搜索"注释自定义洁面乳"。

using Veracode.Attributes;
[FilePathCleanser]
public static string GetSafeFileName(string fileNameToValidate)
{
...

也就是说,您的实现并不安全。尝试传入"C:\Windows\System32otepad.exe"作为要写入的文件名,您将看到问题。

黑名单只能处理您的期望。 白名单是一种更强大的方法。 您的方法应基于目录白名单、文件名字符白名单和文件扩展名白名单。

我试图解决类似的问题,但在 java 上下文中。我们使用ESAPI作为外部库。您可以查看esapi项目(有关如何在项目中实现更好的解决方案的想法):https://github.com/ESAPI/esapi-java-legacy

实际上使用 esapi 验证器并没有解决 veracode 的问题,但在我看来降低了攻击的风险。有了这样的库,你可以确保用户不能从父文件夹中读取文件(你必须硬编码这样的目录),并且用户不能读取扩展名不正确的文件 ->你可以添加这样的列表与文件扩展名。但是此库不能保证您不能操作具有允许扩展名的父目录中的文件。

因此,如果您认为所有需要的文件路径验证都已完成,则必须要求通过设计进行缓解,或者开发一个包含项目中所有所需文件资源的 Map,以确保用户无法操作外部文件。

此外,如果您认为您已经创建了一个良好的文件路径验证,则可以使用清理器注释来标记您的方法。在这里,您可以阅读有关定制清洁剂的更多信息 https://help.veracode.com/reader/DGHxSJy3Gn3gtuSIN2jkRQ/xrEjru~XmUHpO6~0FSae2Q

最新更新