有没有人使用Fortify 360与经典ASP?一个Header Manipulation漏洞的故事

时间:2009-10-12 14:04:14

标签: asp-classic antixsslibrary fortify

我正在进行一次短期合同演出,试图修补其遗留代码中的一些漏洞。我正在研究的应用程序是Classic ASP(VBScript)和.Net 2.0(C#)的组合。他们购买的工具之一是Fortify 360.

以下是应用程序中当前的经典ASP页面:

<%@ Language=VBScript %>
<%
Dim var

var = Request.QueryString("var")
' do stuff
Response.Redirect "nextpage.asp?var=" & var
%>

我知道,我知道,简短且非常危险。

所以我们编写了一些(en / de)编码器和验证/验证程序:

<%@ Language=VBScript %>
<%
Dim var

var = Decode(Request.QueryString("var"))
' do stuff
if isValid(var) then 
    Response.Redirect "nextpage.asp?var=" & Encode(var)
else
   'throw error page
end if
%> 

Fortify仍然认为这很容易受到Header Manipulation的影响。 Fortify正在寻找什么或究竟是什么?

我怀疑Fortify正在寻找特定关键字的原因是,在.Net方面,我可以包括Microsoft AntiXss程序集和调用函数,如GetSafeHtmlFragmentUrlEncode,Fortify是高兴。

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

Jarret R是对的;您需要使用规则构建器来创建Dataflow Cleanse规则;将函数名称指定为小写,将语言指定为“vb”。

您的规则应如下所示:

        <DataflowCleanseRule formatVersion="3.10" language="vb">
            <RuleID>12345-67890-BABE-CAFE</RuleID>
            <TaintFlags>-XSS,+VALIDATED_CROSS_SITE_SCRIPTING</TaintFlags>
            <FunctionIdentifier>
                <NamespaceName>
                    <Pattern/>
                </NamespaceName>
                <ClassName>
                    <Pattern/>
                </ClassName>
                <FunctionName>
                    <Pattern CaseInsensitive="true">(?i)decode</Pattern>
                </FunctionName>
                <ApplyTo implements="true" overrides="true" extends="true"/>
            </FunctionIdentifier>
            <OutArguments>return</OutArguments>
        </DataflowCleanseRule>

答案 1 :(得分:1)

如果编码方法是您自己的(或Fortify无法识别的方法),您将必须编写一个自定义规则来告诉它脏域(在这种情况下为var)一旦运行通过编码方法。

答案 2 :(得分:0)

对XDR(跨站点重定向)的潜力以及可能的HTTP响应拆分感到不满。 Fortify可能不知道你的编码例程做了什么,因此它标记它(用户控制的变量用于重定向)。 顺便说一下,Cat.Net做同样的事情。 我认为你是对的AntiXSS会让它变得快乐。