API成批分配漏洞介绍

这篇具有很好参考价值的文章主要介绍了API成批分配漏洞介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

API成批分配漏洞介绍

API 特定:可利用性 2

     利用通常需要了解业务逻辑、对象关系和 API 结构。 在 API 中利用批量分配更容易,因为按照设计,它们公开了应用程序的底层实现以及属性名称。

安全弱点:

      现代框架鼓励开发人员使用自动将客户端输入绑定到代码变量和内部对象的函数。 攻击者可以使用这种方法来更新或覆盖开发人员从未打算公开的敏感对象的属性。

影响:

      利用该漏洞可能会导致权限升级、数据篡改、绕过安全机制等。

API 是否容易受到攻击?
       现代应用程序中的对象可能包含许多属性。 其中一些属性应由客户端直接更新(例如,user.first_name 或 user.address),而另一些则不应该(例如,user.is_vip 标志)。

如果 API 端点自动将客户端参数转换为内部对象属性,而不考虑这些属性的敏感性和暴露级别,则该端点容易受到攻击。 这可能允许攻击者更新他们不应访问的对象属性。

敏感属性的示例:

权限相关属性:user.is_admin、user.is_vip 只能由管理员设置。
与流程相关的属性:user.cash 只能在付款验证后在内部设置。
内部属性:article.created_time 只能由应用程序内部设置。

攻击场景示例
场景#1
       乘车共享应用程序为用户提供了编辑其个人资料的基本信息的选项。 在此过程中,API 调用将使用以下合法 JSON 对象发送到 PUT /api/v1/users/me:

{“用户名”:“inons”,“年龄”:24}
请求 GET /api/v1/users/me 包含一个额外的credit_balance 属性:

{"user_name":"inons","age":24,"credit_balance":10}
攻击者使用以下有效负载重放第一个请求:

{“user_name”:“攻击者”,“年龄”:60,“credit_balance”:99999}
由于端点容易受到大规模分配的影响,攻击者无需付费即可获得积分。

场景#2
        视频共享门户允许用户上传和下载不同格式的内容。 探索 API 的攻击者发现端点 GET /api/v1/videos/{video_id}/meta_data 返回带有视频属性的 JSON 对象。 其中一个属性是“mp4_conversion_params”:“-v codec h264”,这表示应用程序使用 shell 命令来转换视频。

       攻击者还发现端点 POST /api/v1/videos/new 容易受到批量分配的影响,并允许客户端设置视频对象的任何属性。 攻击者设置恶意值如下:“mp4_conversion_params”:“-v codec h264 && format C:/”。 一旦攻击者将视频下载为 MP4,该值将导致 shell 命令注入。

攻击者利用批量分配漏洞:

当来自客户端的手动修改不可变内部对象属性的请求不受 API 端点限制时,就会出现 API 批量分配漏洞。

攻击者可以利用此漏洞,通过构建 HTTP 请求来升级用户权限、绕过安全机制或使用任何其他方法使 API 端点以非设计的方式工作。

注意:批量分配和过多数据暴露在 OWASP API Sec 2019 中是一个单独的风险类别,现在已合并到名为“损坏对象属性级别授权”的新风险类别中

API成批分配漏洞介绍

如何预防
如果可能,请避免使用自动将客户端输入绑定到代码变量或内部对象的函数。
仅将应由客户端更新的属性列入白名单。
使用内置功能将客户端不应访问的属性列入黑名单。
如果适用,请显式定义并强制执行输入数据有效负载的架构。
增加反序列化配置

#1、在项目的统一序列化配置中开启严格匹配模式(?如有),此处以jackson为例
@Configuration
public class JacksonConverters {
     @Bean
     public HttpMessageConverters JacksonHttpMessageConverters() {
         MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter
                 = new MappingJackson2HttpMessageConverter();
         ObjectMapper objectMapper = new ObjectMapper();
         //省略其他配置开始
         //反序列化的时候如果多了其他属性,抛出异常
         objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true);
         //省略其他配置结束
      }
}
 
#2、统一异常捕获或者返回处增加非200状态码
     /**
      * 捕获反序列化异常HttpMessageNotReadableException,增加500状态码返回
      * @param request   请求
      * @param exception 异常对象
      * @return 响应
      */
     @ExceptionHandler(value = HttpMessageNotReadableException.class)
     public ResponseEntity<Map<String, Object>> methodHttpMessageNotReadableExceptionHandler(
             HttpServletRequest request, HttpMessageNotReadableException exception) {
         //按需重新封装需要返回的错误信息
         WebRequest webRequest = new ServletWebRequest(request);
         Map<String, Object> body = errorAttributes.getErrorAttributes(webRequest, ErrorAttributeOptions.defaults());
         body.put(DATA, "convert exception message to JSON");
         body.put(STATUS, HttpStatus.INTERNAL_SERVER_ERROR.value());
         body.put(MESSAGE, HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());
         body.put(SUCCESS,false);
         return new ResponseEntity<>(body, HttpStatus.INTERNAL_SERVER_ERROR);
     }
 
#2、或在在其他异常拦截方法上增加状态码注解
     @ResponseStatus()


接口使用参数签名机制,如HMac, HMac Springboot, 微信支付参数签名

#前端请求
 
请求 URL: http://localhost/cars/query
请求方法: POST
HTTP状态码:200
playload:{"color":"red","company":"ltl","seats":"2-2"} #正常请求
Header:sign:ErOVBda4VMFdX9aixigRslAjY0rhT7lLxy
 
#后端controller
@PostMapping(value = "/query")
public BaseResponse query(@RequestBody Car car){
     String signFront=request.header("sign");
     String signBackend=signUtils.handler(car);
     if(!signBackend.equals(signFront)){
         throws new ServiceErrorException("签名异常");       
     }
}


Jackson类库解决方案

Solution - Jackson @JsonView
We can create JSON view like below:

public class View {
    
    public static class Editable {}
    public static class Viewable extends Editable {}
    public static class Internal extends Viewable {}
}

Then annotate our mode class:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Model implements Serializable {

 @JsonView(View.Editable.class)
 protected String editableField;

 @JsonView(View.Viewable.class)
 protected String viewableField; 

 @JsonView(View.Internal.class)
 protected String internalField;
}

At last, we annotate out jax-rs resource with @JsonView annotation. 
 @GET
 @Produces(MediaType.APPLICATION_JSON )
 @JsonView(View.Viewable.class)
 public Iterable<Model> search() {}

 @GET
 @Path("{id}")
 @Produces(MediaType.APPLICATION_JSON )
 @JsonView(View.Viewable.class)
 public Model getModel(@PathParam("id") final String id) {}

 @POST
 @Consumes({MediaType.APPLICATION_JSON})
 public Response add(@JsonView(View.Editable.class) final Model model) {}

Spring MVC provides data binder that we can specify what fields are not allowed.

禁用字段:

@InitBinder public void initBinder(WebDataBinder binder) {
     binder.setDisallowedFields(DISALLOWED_FIELDS);
}

允许字段:

@Controller
public class UserController {
     @InitBinder
     public void initBinder(WebDataBinder binder, WebRequest request) {
             binder.setAllowedFields(["userid", "password", "email"]);
         }
         ...
}


参考
External
  • CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes
  • Testing for Mass Assignment

今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管管,团队建设 有参考作用 , 您可能感兴趣的文章:
领导人怎样带领好团队
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变

如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。文章来源地址https://www.toymoban.com/news/detail-747150.html

到了这里,关于API成批分配漏洞介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flink--7、窗口(窗口的概念、分类、API、分配器、窗口函数)、触发器、移除器

                           星光下的赶路人star的个人主页                        内心的平静始于不再让他人掌控你的感情 在批处理统计中,我们可以等待一批数据都到齐后,统一处理。但是在实时处理统计中,我们是来一

    2024年02月08日
    浏览(44)
  • 网件路由器的分配宽带设置方法介绍

        在进行路由器宽带限速设置之前,先要了解我们开通的宽带是多少,是几台电脑一起共享这些宽带,这里我们先以我们的宽带是2M,2个人在同时使用,IP地址使用自动获取来分配宽带限速。 一、设置IP地址自动获取,先把路由器的DHCP主要参数设置好 。   1、DHCP服务器:启

    2024年02月05日
    浏览(61)
  • Qt Designer 控件箱中的控件介绍及布局比列分配

    控件箱介绍                 Qt Designer的控件箱(Widget Box)包含了各种常用的控件,用户可以通过拖放的方式将这些控件添加到窗体设计器中,用于构建用户界面。以下是一些常见控件箱中的控件及其功能的讲解: 1. 基本控件 : 标签(Label) :用于显示文本或图像。

    2024年04月13日
    浏览(36)
  • 漏洞发现-API接口服务之漏洞探针类型利用修复(45)

    这里能探针到开放的端口,可以判断出端口的所属类型,这里涉及到证明检测,然后是证明利用可以对端口进行攻击, 端口服务开发这个端口,可以对这个端口进行攻击的。 apl接口, 主要针对应用上面的接口,有支付的,有订单的各种各样的端口, 最后一个就是补充的知识

    2024年02月08日
    浏览(35)
  • API漏洞检测研究

    xray API漏洞检测_青霄的博客-CSDN博客 Swagger ui接口自动化批量漏洞测试_swgeer-ui 漏洞_山山而川\\\'的博客-CSDN博客           什么是 API 安全测试以及它是如何工作的? | Synopsys API 安全测试针对应用程序编程接口 (API) ,就其安全性、正确性和可靠性进行测试,以确保其符合组织的

    2024年02月16日
    浏览(26)
  • 架构师成长之路Redis第一篇|Redis 安装介绍以及内存分配器jemalloc

    Redis官网:https://redis.io/download/ 下载安装二进制文件 可下载安装最新版Redis7.2.0,或者可选版本6.x 我这里下载6.2.13和7.2最新版本,后面我们都是安装6.2.13版本的信息进行讲解 二进制文件安装步骤 安装前期准备: 安装gcc yum install gcc 压缩文件 tar -xzf redis6.2.13.tar.gz 编译 cd redis-x

    2024年02月11日
    浏览(48)
  • API安全学习 - crAPI漏洞靶场与API测试思路

    API是应用程序编程接口(Application Programming Interface)的缩写,是软件系统中不同组件之间进行通信和交互的接口。它是一组定义、规范和协议,用于编写应用程序的软件接口,允许不同应用程序之间进行相互通信和交互。API通常由一系列的函数、协议、工具和标准组成,它们

    2024年02月09日
    浏览(33)
  • API安全Top 10 漏洞:crAPI漏洞靶场与解题思路

    靶场简介 在 hack 中学习,不要去学习 hack 。 对于想了解 API 安全的同学,最直接的方式就是拿到一个靶场进行实战。正好,crAPI 项目就是 OWASP 推出的 API 安全项目,可以帮助大家了解常见的 API 安全漏洞。 本文将对 crAPI 靶场的相关漏洞以及打靶思路进行简单的介绍,希望对

    2024年01月20日
    浏览(40)
  • API接口漏洞利用及防御

    API是不同软件系统之间进行数据交互和通信的一种方式。API接口漏洞指的是在API的设计、开发或实现过程中存在的安全漏洞,可能导致恶意攻击者利用这些漏洞来获取未授权的访问、篡改数据、拒绝服务等恶意行为。 API(Application Programming Interface,应用程序编程接口)是不同

    2024年02月12日
    浏览(49)
  • Docker API 未授权访问漏洞

    1、漏洞简介 在Docker的部署文档中,由于默认存在某些不安全的配置样例,导致2375管理端口对外,该未授权访问漏洞是因为Docker API可以执行Docker命令,该接口是目的是取代Docker命令界面,通过URL操作Docker。 2、漏洞原理 利用 Docker 节点上开放的 TCP 端口 2375 远程执行 Docker 命令

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包