安全编码准则是如何演变的
上周,我正在研究Java Spring的漏洞,以使我们的安全编码准则达到最新水平。我浏览了我们平台上现有的挑战,并注意到一些关于通过在JSP页面显示url参数的XSS。不正确的代码例子看起来类似于下面的内容。
<input type="text" name="username" value="${param.username}">
正确的解决方案是完全删除URL参数,描述中提到,以正确的方式转义URL参数也是安全的。
现在,我的工作是以一种让开发者清楚的方式来制定安全编码准则,并在编写安全代码的同时尽可能地限制他们。在这种情况下,我更愿意让开发人员保留他们的预期功能,并建议他们通过转义URL参数来实现安全的功能。这样一来,代码就不再包含XSS漏洞。上面的例子可以这样来保证安全。
<input type="text" name="username" value="${fn:escapeXml(param.username)}">
这就是我们几天来的安全编码准则,直到我偶然发现了一个关于表达式语言注入的OWASP页面。这个页面描述了Spring表达式语言(SpEL)如何被滥用于注入,并产生一些严重的影响,包括远程代码执行。我想弄清楚,在某些情况下,遵守我们安全编码准则的代码仍然会受到这个漏洞的影响。所以我写了一个快速测试程序来评估SpEL表达式,并测试了有无Xml转义的输入,看看是否能找到一些不会被发现的情况。我做到了,有一些恶意的表达式不包含任何被XmlEscape捕获的字符。我在我们的github上发布了工作演示,你可以在这里找到。
当然,我还更新了我们的安全编码准则,现在的内容是。"不要使用Spring表达式语言(SpEL)显示或评估URL参数"。
这个问题的总体影响是高,原因如下。 - 攻击者可以修改和调用应用服务器上的功能。- 对数据和功能的未经授权的访问,以及账户劫持和远程代码执行。- 保密性,以及成功攻击带来的完整性问题。
https://www.owasp.org/index.php/Expression_Language_Injection


上周,我正在研究Java Spring的漏洞,以使我们的安全编码准则达到最新水平。我浏览了我们平台上现有的挑战,并注意到一些关于通过在JSP页面显示url参数的XSS。不正确的代码例子看起来类似于下面的内容。
<input type="text" name="username" value="${param.username}">
正确的解决方案是完全删除URL参数,描述中提到,以正确的方式转义URL参数也是安全的。
现在,我的工作是以一种让开发者清楚的方式来制定安全编码准则,并在编写安全代码的同时尽可能地限制他们。在这种情况下,我更愿意让开发人员保留他们的预期功能,并建议他们通过转义URL参数来实现安全的功能。这样一来,代码就不再包含XSS漏洞。上面的例子可以这样来保证安全。
<input type="text" name="username" value="${fn:escapeXml(param.username)}">
这就是我们几天来的安全编码准则,直到我偶然发现了一个关于表达式语言注入的OWASP页面。这个页面描述了Spring表达式语言(SpEL)如何被滥用于注入,并产生一些严重的影响,包括远程代码执行。我想弄清楚,在某些情况下,遵守我们安全编码准则的代码仍然会受到这个漏洞的影响。所以我写了一个快速测试程序来评估SpEL表达式,并测试了有无Xml转义的输入,看看是否能找到一些不会被发现的情况。我做到了,有一些恶意的表达式不包含任何被XmlEscape捕获的字符。我在我们的github上发布了工作演示,你可以在这里找到。
当然,我还更新了我们的安全编码准则,现在的内容是。"不要使用Spring表达式语言(SpEL)显示或评估URL参数"。
这个问题的总体影响是高,原因如下。 - 攻击者可以修改和调用应用服务器上的功能。- 对数据和功能的未经授权的访问,以及账户劫持和远程代码执行。- 保密性,以及成功攻击带来的完整性问题。
https://www.owasp.org/index.php/Expression_Language_Injection

上周,我正在研究Java Spring的漏洞,以使我们的安全编码准则达到最新水平。我浏览了我们平台上现有的挑战,并注意到一些关于通过在JSP页面显示url参数的XSS。不正确的代码例子看起来类似于下面的内容。
<input type="text" name="username" value="${param.username}">
正确的解决方案是完全删除URL参数,描述中提到,以正确的方式转义URL参数也是安全的。
现在,我的工作是以一种让开发者清楚的方式来制定安全编码准则,并在编写安全代码的同时尽可能地限制他们。在这种情况下,我更愿意让开发人员保留他们的预期功能,并建议他们通过转义URL参数来实现安全的功能。这样一来,代码就不再包含XSS漏洞。上面的例子可以这样来保证安全。
<input type="text" name="username" value="${fn:escapeXml(param.username)}">
这就是我们几天来的安全编码准则,直到我偶然发现了一个关于表达式语言注入的OWASP页面。这个页面描述了Spring表达式语言(SpEL)如何被滥用于注入,并产生一些严重的影响,包括远程代码执行。我想弄清楚,在某些情况下,遵守我们安全编码准则的代码仍然会受到这个漏洞的影响。所以我写了一个快速测试程序来评估SpEL表达式,并测试了有无Xml转义的输入,看看是否能找到一些不会被发现的情况。我做到了,有一些恶意的表达式不包含任何被XmlEscape捕获的字符。我在我们的github上发布了工作演示,你可以在这里找到。
当然,我还更新了我们的安全编码准则,现在的内容是。"不要使用Spring表达式语言(SpEL)显示或评估URL参数"。
这个问题的总体影响是高,原因如下。 - 攻击者可以修改和调用应用服务器上的功能。- 对数据和功能的未经授权的访问,以及账户劫持和远程代码执行。- 保密性,以及成功攻击带来的完整性问题。
https://www.owasp.org/index.php/Expression_Language_Injection
上周,我正在研究Java Spring的漏洞,以使我们的安全编码准则达到最新水平。我浏览了我们平台上现有的挑战,并注意到一些关于通过在JSP页面显示url参数的XSS。不正确的代码例子看起来类似于下面的内容。
<input type="text" name="username" value="${param.username}">
正确的解决方案是完全删除URL参数,描述中提到,以正确的方式转义URL参数也是安全的。
现在,我的工作是以一种让开发者清楚的方式来制定安全编码准则,并在编写安全代码的同时尽可能地限制他们。在这种情况下,我更愿意让开发人员保留他们的预期功能,并建议他们通过转义URL参数来实现安全的功能。这样一来,代码就不再包含XSS漏洞。上面的例子可以这样来保证安全。
<input type="text" name="username" value="${fn:escapeXml(param.username)}">
这就是我们几天来的安全编码准则,直到我偶然发现了一个关于表达式语言注入的OWASP页面。这个页面描述了Spring表达式语言(SpEL)如何被滥用于注入,并产生一些严重的影响,包括远程代码执行。我想弄清楚,在某些情况下,遵守我们安全编码准则的代码仍然会受到这个漏洞的影响。所以我写了一个快速测试程序来评估SpEL表达式,并测试了有无Xml转义的输入,看看是否能找到一些不会被发现的情况。我做到了,有一些恶意的表达式不包含任何被XmlEscape捕获的字符。我在我们的github上发布了工作演示,你可以在这里找到。
当然,我还更新了我们的安全编码准则,现在的内容是。"不要使用Spring表达式语言(SpEL)显示或评估URL参数"。
这个问题的总体影响是高,原因如下。 - 攻击者可以修改和调用应用服务器上的功能。- 对数据和功能的未经授权的访问,以及账户劫持和远程代码执行。- 保密性,以及成功攻击带来的完整性问题。
https://www.owasp.org/index.php/Expression_Language_Injection
资源
安全技能基准测试:简化企业安全设计
寻找有关 "按设计确保安全 "计划成功与否的有意义的数据是众所周知的难题。首席信息安全官(CISO)在试图证明投资回报率(ROI)和安全计划活动在人员和公司层面上的商业价值时,往往会面临挑战。更不用说,企业要深入了解自己的组织是如何以当前的行业标准为基准的,更是难上加难。美国总统的《国家网络安全战略》向利益相关者提出了 "通过设计实现安全和弹性 "的挑战。让 "按设计保证安全 "计划发挥作用的关键不仅在于为开发人员提供确保代码安全的技能,还在于向监管机构保证这些技能已经到位。在本演讲中,我们将分享大量定性和定量数据,这些数据来自多个主要来源,包括从超过 25 万名开发人员那里收集的内部数据点、数据驱动的客户洞察力以及公共研究。利用这些数据点的汇总,我们旨在传达一个跨多个垂直领域的 "按设计保证安全 "计划的现状。报告详细阐述了这一领域目前未得到充分利用的原因、成功的技能提升计划对降低网络安全风险的重大影响,以及消除代码库中各类漏洞的潜力。