CWE-23:相对路径遍历
查看自定义信息:
该表显示了与该弱点相关的弱点和高级类别。这些关系定义为childof,parentof,ementof,并深入了解可能存在于较高和较低抽象水平的类似项目。此外,定义了诸如Peerof和Canalsobe之类的关系,以显示用户可能想要探索的类似弱点。
与观点“研究概念”相关(CWE-1000)
与“软件开发”视图相关(CWE-699)
与“ CISQ质量措施(2020)”相关(CWE-1305)
与“ CISQ数据保护措施”(CWE-1340)有关
该清单显示了可能出现的弱点的可能区域。这些可能适用于特定的命名语言,操作系统,体系结构,范式,技术或一类此类平台。该平台与给定弱点出现在该实例的频率一起列出。
语言 班级:不是特定语言的(不确定的患病率)
该表指定与弱点相关的不同个人后果。该范围确定了违反的应用程序安全区域,而影响描述了如果对手成功利用这一弱点,就会产生负面的技术影响。其可能性提供了有关预期相对于列表中其他后果的特定后果的可能性的信息。例如,可能会利用弱点来实现一定的影响,但很可能会利用它来实现不同的影响。
示例1 以下URL容易受到此攻击:
(不良代码)
http://example.com.br/get-files.jsp?file=report.pdf
http://example.com.br/get-page.php?home=aaa.html http://example.com.br/some-page.asp?page=index.html 执行此攻击的一种简单方法就是这样:
(攻击代码)
http://example.com.br/get-files?file=../../../../../somedir/somefile
http://example.com.br/../../../../../../etc/shadow http://example.com.br/get-files?file=../../../../../../etc/passwd 示例2 以下代码可以用于社交网络应用程序,其中每个用户的配置文件信息都存储在单独的文件中。所有文件都存储在一个目录中。
(不良代码)
示例语言:珀尔
我的$ datapath =“/users/cwe/profiles”;
我的$ username = param(“用户”); 我的$ profilePath = $ datapath。“/”。$ username; 打开(我的$ fh,“ <”,$ profilePath)||exitError(“ profile读取错误:$ profilepath”); 打印“
while(<$ fh>){
打印“ }打印“ 程序员打算访问诸如“/users/cwe/profiles/alice”或“/users/cwe/profiles/bob”之类的文件,但没有验证传入的用户参数。攻击者可以提供一个字符串,例如:
(攻击代码)
../../../../../etc/passwd
该程序将生成类似的配置文件路径名:
(结果)
/Users/cwe/profiles/../../../../../etc/passwd
打开文件后,操作系统在路径规范化过程中解决“ ../”,并实际访问此文件:
(结果)
/etc/passwd
结果,攻击者可以读取密码文件的整个文本。 注意此代码还包含错误消息信息泄漏(CWE-209)如果用户参数不产生存在的文件:提供完整的路径名。由于缺乏检索文件的输出编码,也可能存在跨站点脚本问题(CWE-79)如果配置文件包含任何HTML,则需要检查其他代码。 示例3 以下代码演示了使用Java Servlet和路径遍历漏洞的文件上载的不受限制上传。HTML表单的操作属性将上传文件请求发送到Java Servlet。
(好代码)
示例语言:html
提交后,Java Servlet的Dopost方法将接收请求,请从HTTP请求标头中提取文件名,从请求中读取文件内容,然后将文件输出到本地上载目录。
(不良代码)
示例语言:爪哇
公共类FileUploadServlet扩展了Httpservlet {
...
受保护的void dopost(httpservletrequest请求,httpservletresponse响应)抛出ServletException,ioexception {
response.setContentType(“ text/html”);
printWriter out = response.getWriter(); 字符串contentType = request.getContentType(); //边界标头的起始位置 int ind = contentType.indexof(“ boundare =”); 字符串边界= contentType.substring(ind+9); 字符串pline = new String(); 字符串uploadLocation = new String(upload_directory_string);//常数值 //验证内容类型是多部分表单数据 if(contentType!= null && contentType.indexof(“ multipart/form -data”)!= -1){
//从HTTP标头提取文件名
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream())); ... pline = br.readline(); 字符串fileName = pline.substring(pline.lastindexof(“ \\”),pline.lastIndexof(“ \''”)); ... //将文件输出到本地上传目录 尝试 {
BufferedWriter BW = new BufferedWriter(new FileWriter(uploadLocation+fileName,true));
for(字符串行;(line = br.readline())!= null;){
if(line.indexof(boundary)== -1){ } //循环结束
bw.write(line); }bw.newline(); bw.flush(); bw.close(); } catch(ioexception ex){...} //输出成功上传响应HTML页面 //输出失败上传响应HTML页面 别的 {...}
...
此代码不对要上传的文件类型执行检查(CWE-434)。这可以允许攻击者上传任何可执行的文件或其他使用恶意代码的文件。 此外,BufferedWriter对象的创建受相对路径遍历的约束(CWE-23)。由于代码未检查标题中提供的文件名,因此攻击者可以使用“ ../”序列来写入预期目录之外的文件。根据执行环境的不同,攻击者可能能够指定任意文件,从而导致各种后果,从代码执行,XSS(CWE-79),或系统崩溃。
此成员关系表显示了其他CWE类别和视图,将此弱点称为成员。该信息通常可用于理解弱点适合外部信息源的何处。
提供更多信息 - 请选择其他过滤器。
|
使用共同弱点枚举(CWE)和本网站的相关参考使用条款。CWE由美国国土安全部(DHS)网络安全和基础设施安全局(CISA),由国土安全系统工程和开发研究所(HSSEDI)由manbetx客户端首页(MITER)。版权所有©2006–2023,Miter Comanbetx客户端首页rporation。CWE,CWSS,CWRAF和CWE徽标是Miter Corporation的商标。manbetx客户端首页 |