做二维码签到的网站,浙江产品设计公司,中科网站建设,网站快速排名上iOS内购欺诈漏洞 1.iOS内购欺诈漏洞概述2.伪造的凭证3.漏洞修复方案 1.iOS内购欺诈漏洞概述
黑产别的App上低价充值#xff08;比如1元#xff09;换取苹果真实凭证#xff0c;再在目标App上下单高价#xff08;648元#xff09;商品#xff0c;传入该凭证#xff0c;如… iOS内购欺诈漏洞 1.iOS内购欺诈漏洞概述2.伪造的凭证3.漏洞修复方案 1.iOS内购欺诈漏洞概述
黑产别的App上低价充值比如1元换取苹果真实凭证再在目标App上下单高价648元商品传入该凭证如果目标App服务端苹果凭证校验接口存在漏洞只校验了凭证中商品和订单信息未校验凭证中App来源bundleID则会验证通过进而发货
对黑产来说黑产实际只支付了1元就能买到目标App的648元商品对于目标App来说他连这1元都没得到因为是在别的App上充的完全被白嫖648元商品。可谓伤害极大
还原盗刷步骤
黑产通过破解比如抓网络请求目标App客户端获得648元商品的苹果商品idproduct_id值。黑产自己上架一款App在苹果后台添加一款1元的内购商品设置苹果商品idproduct_id值和目标App一致。黑产在自己的App里真实付款1元商品拿到苹果返回的真实凭据receipt和苹果交易idtransaction_id。黑产破解目标App客户端后直接调目标App的苹果凭证校验接口把上面获得的凭据receipt和苹果交易idtransaction_id作为参数传进去。目标App服务端拿着凭据去苹果后台校验由于凭据是真实的苹果验证通过。目标App服务端解析凭证校验凭证内参数核对product_id正确、核对transaction_id唯一性通过全部校验通过发货。
漏洞的主要原因
苹果后台苹果商品id不同开发者账号下可以重复目标App服务端凭证校验接口未校验凭证中App来源bundleID。 2.伪造的凭证
下面是被攻击App服务端提供的一段日志记录了“伪造的”凭证样式
最外层的bundle_id并不是目标App的包名而是一个不认识的App包名。这个就是黑产真实充值的App。in_app数组里面product_id却是目标App里有效的苹果商品id正是648元商品的product_id。再看transaction_id。这里的transaction_id实际上是黑产App内充值产生的并不是目标App内产生的。因为transaction_id只有在苹果内购付款成功后才会生成且只能由客户端传给服务端所以服务端是没法校验transaction_id是否来源于自己的App。服务端能做的就是判断transaction_id是否重复防止重放攻击。因为黑产每次充值都会真实的充一笔所以transaction_id并不会重复这也是目标App服务器验证transaction_id通过的原因。
{receipt_type: Production,adam_id: 6441231333,app_item_id: 6441231333,bundle_id: com.apps.slanCaizhuang, //这并不是目标App的bundleID而是黑产自己的的Appapplication_version: 3,download_id: 502222222222222222,version_external_identifier: 855304439,receipt_creation_date: 2023-04-12 16:59:25 Etc/GMT,receipt_creation_date_ms: 1681318765000,receipt_creation_date_pst: 2023-04-12 09:59:25 America/Los_Angeles,request_date: 2023-04-12 17:16:54 Etc/GMT,request_date_ms: 1681319814498,request_date_pst: 2023-04-12 10:16:54 America/Los_Angeles,original_purchase_date: 2023-03-11 05:00:05 Etc/GMT,original_purchase_date_ms: 1678510805000,original_purchase_date_pst: 2023-03-10 21:00:05 America/Los_Angeles,original_application_version: 3,in_app: [{quantity: 1,product_id: com.xiaomi.haha123, //这里却是目标App的product_idtransaction_id: 210000000000000,//黑产自己App上支付产生的transaction_idoriginal_transaction_id: 210000000000000,purchase_date: 2023-04-12 16:59:25 Etc/GMT,purchase_date_ms: 1681318765000,purchase_date_pst: 2023-04-12 09:59:25 America/Los_Angeles,original_purchase_date: 2023-04-12 16:59:25 Etc/GMT,original_purchase_date_ms: 1681318765000,original_purchase_date_pst: 2023-04-12 09:59:25 America/Los_Angeles,is_trial_period: false,in_app_ownership_type: PURCHASED}],environment: Production,status: 0
}3.漏洞修复方案
1、服务端凭证校验时加上bundleID的校验即可
即服务端去苹果那边校验通过后还需核对凭证内以下参数
bundle_id是否为你们自己的App防止跨App充值product_id是否为下单时对应的商品id防止App内部以小博大transaction_id是否已经发过货防止重放攻击
2、共享密钥推荐
服务端请求苹果凭证校验接口时除了传receipt-data字段再额外传一个password参数苹果后台生成的共享密钥。这样苹果那边核对凭证时除了验证凭证是否有效还会核对凭证和密钥是否匹配。如果不匹配苹果会返回错误信息
官方文档地址https://developer.apple.com/documentation/appstorereceipts/requestbody?languageobjc