V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
stimw
V2EX  ›  程序员

我理解有问题还是 backblaze 的对象存储就有这种漏洞?

  •  1
     
  •   stimw · 2021-06-20 08:53:28 +08:00 · 5070 次点击
    这是一个创建于 1040 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前看到 v 友讨论腾讯 cos 防刷,有人提到:

    事实上如果找到你 COS 桶源站域名,就算你每个请求都鉴权,攻击者也可以靠刷请求次数让你破产~(无效请求也要计费)

    看后虎躯一震,想到一直在用 backblaze 的对象存储服务完全可以被别人推出桶源站域名( S3 URL)...

    具体情况如下:

    背景

    我目前是 backblaze 搭配 cloudflare 使用,使用他们的"friendly URL"套 cf 可以减免回源流量费。

    官方套 cf 文档: https://help.backblaze.com/hc/en-us/articles/217666928-Using-Backblaze-B2-with-the-Cloudflare-CDN

    槽点

    简单解释一下,

    Friendly URL 示例: https://f000.backblazeb2.com/file/my-bucket-name/image-name

    也就是说,套上 cf 后,访问地址就变成了: https://我的二级域名 /file/存储桶名 /图片名

    Xnip2021-06-20_08-36-45.jpg

    然后它的 S3 URL 是这样的: https://存储桶名.s3.us-west-000.backblazeb2.com/图片名

    那么问题来了,其他人只要根据 cdn 访问地址,就可以知道我的存储桶名,然后轻易地推出 S3 URL 。

    然后就如 v 友所说。。

    事实上如果找到你 COS 桶源站域名,就算你每个请求都鉴权,攻击者也可以靠刷请求次数让你破产~(无效请求也要计费)

    官方第一次回应

    Hello there,

    Thank you for taking the time to write in,

    The only vulnerability that may occur is if a malicious user would download your files many times to incur a large download bill on your part, but just knowing the public URLs of the files does not grant access or the ability to upload or delete files from a public bucket. If the bucket is private no downloads, inquires or other type of access can occur unless they have a valid app key and keyID to that bucket, which would be impossible to retrieve from your website.

    Let me know if you have any other questions.

    Regards,

    Bob The Backblaze Team

    可能我表达出了问题,他没有理解我的意思,还是确实他们的无效请求不计费?

    我现在再问的话,因为有时差,应该明天才能回复我了。

    本来就对这个不太懂,有没有 v 友可以指导下...

    第 1 条附言  ·  2021-06-20 14:41:59 +08:00
    搜着搜着搜出来个大坑:

    Backblaze's B2 web UI seems to submit all of the names and sizes of my files in my B2 bucket to facebook

    https://twitter.com/Benjojo12/status/1373707799054712836

    这应该不算是漏洞了吧。。。这是纯粹主观恶心用户行为吧。。
    24 条回复    2022-05-24 11:41:23 +08:00
    stimw
        1
    stimw  
    OP
       2021-06-20 09:14:52 +08:00
    kerro1990
        2
    kerro1990  
       2021-06-20 09:16:20 +08:00
    rewrite 一下不就行了, 隐藏一下 bucket name
    ericls
        3
    ericls  
       2021-06-20 09:16:54 +08:00 via iPhone
    感觉他们都 typo 了
    icy37785
        4
    icy37785  
       2021-06-20 10:42:32 +08:00 via iPhone
    这肯定不能算漏洞呀,好像公园提供福利 60 岁以上老人免票,总不能说没带老年证没带身份证就免不了票是漏洞吧。证件得自己带吧。
    流量联盟这事儿也是的,流量联盟互免流量是提供的福利的,怎么隐藏自己的 bucket name 是用户自己的事情。
    甚至不排除他们就是是故意这样设计的,如果是故意这样设计的那就更不是漏洞了。🙈
    ruixue
        5
    ruixue  
       2021-06-20 11:04:03 +08:00
    https://blog.meow.page/archives/free-personal-image-hosting-with-backblaze-b2-and-cloudflare-workers/

    可以用其他方式隐藏
    stimw
        6
    stimw  
    OP
       2021-06-20 11:56:08 +08:00
    @kerro1990 我仔细查看了文档,CF 的免费甚至 pro 计划都不支持使用正则表达式重写...不过下面有朋友发了一个 cf worker 的教程,感觉可以。


    @icy37785 emm...漏洞这个表述可能不太恰当,改成“坑”或者“槽点”?


    @ruixue 感谢!正好我也看到了用 Cloudflare Workers 从私有 bucket 中获取资源
    xiaoz
        7
    xiaoz  
       2021-06-20 12:52:13 +08:00 via Android
    可以配合 cf 的 worker 规则隐藏 bucket
    lqf96
        8
    lqf96  
       2021-06-20 12:57:05 +08:00
    @stimw @xiaoz 已经不需要 worker 了,cf 最近推出了新的 transform rules 可以做 rewrite: https://blog.cloudflare.com/introducing-transform-rules-with-url-rewriting-at-the-edge/
    Jooooooooo
        9
    Jooooooooo  
       2021-06-20 13:46:17 +08:00
    地址没做加密吗?
    stimw
        10
    stimw  
    OP
       2021-06-20 14:08:37 +08:00
    @lqf96 这个我试过了,cf 目前免费版甚至 pro plan 似乎都不支持正则表达式去 rewrite...
    boboliu
        11
    boboliu  
       2021-06-20 16:03:18 +08:00
    @stimw #10 可以的, 使用 prefix 匹配然后用 concat 拼接一个 prefix 即可, 效果 https://picb2.oho.sh/2021/06/20/QQ20200721090042.jpg
    AlexPUBLIC
        12
    AlexPUBLIC  
       2021-06-20 16:11:50 +08:00
    @stimw 就是用
    cf worker
    stimw
        13
    stimw  
    OP
       2021-06-20 16:18:14 +08:00
    @boboliu 是不是发错图了...
    boboliu
        14
    boboliu  
       2021-06-20 16:22:29 +08:00
    @stimw #13 ? 我的意思是后面的图是演示
    stimw
        15
    stimw  
    OP
       2021-06-20 16:50:17 +08:00
    @boboliu 臣妾做不到啊
    lostberryzz
        16
    lostberryzz  
       2021-06-20 16:56:10 +08:00
    按照 11L 的方法成功实现

    https://z3.ax1x.com/2021/06/20/RFJ7DK.png
    BrettD
        17
    BrettD  
       2021-06-20 16:56:18 +08:00 via iPhone
    对方以为你说的是安全漏洞吧
    stimw
        18
    stimw  
    OP
       2021-06-20 17:49:39 +08:00
    @lostberryzz
    @boboliu 卧槽是这意思,我也成功了。
    swulling
        19
    swulling  
       2021-06-20 20:37:37 +08:00 via iPhone
    直接开个 bucket 自己测试下不就完了。
    dusu
        20
    dusu  
       2021-06-20 20:56:53 +08:00 via iPhone
    重写一下隐藏 bucket 就行了
    stimw
        21
    stimw  
    OP
       2021-06-20 21:31:55 +08:00
    @lostberryzz
    @boboliu
    @xiaoz
    @lqf96

    本来 rewrite 成功了,但是

    根据 https://help.backblaze.com/hc/en-us/articles/360010017893-How-to-allow-Cloudflare-to-fetch-content-from-a-Backblaze-B2-private-bucket

    把 bucket 设置了 private 并且授权后,rewrite 的 URL 就报 404 了,但是加上 /file/bucketname/可以正常访问

    '''
    {
    "code": "not_found",
    "message": "File with such name does not exist.",
    "status": 404
    }
    '''
    AaronLee
        22
    AaronLee  
       2021-06-21 18:08:29 +08:00
    @boboliu @lostberryzz 怎么做到修改 URL,有没有具体文档?
    keyword233
        23
    keyword233  
       2021-06-22 00:49:43 +08:00
    看邮件 b2 应该是按成功请求收取费用,不过你可以实验一下。
    GetObject 算是 B 类请求,每天前 2500 次免费,然后每 10000 次 4 美分,刷个 13000 次看看扣不扣费就行了。
    (我想其实应该没几个闲人见谁打谁吧?也不必太惊慌 :)
    另外 @lqf96 提到的 transform rules 应该能解决问题,报错的话再看看 cf 的文档吧
    allworldg
        24
    allworldg  
       2022-05-24 11:41:23 +08:00
    我也问了一下 b2 官方客服,他是这么回复我的:

    Thank you for contacting us. To go beyond the download cap on the free plan, you would need to put in billing information onto the account or you would have to wait till tomorrow to resume your downloads. We will not close the bucket. Since you are worried about large requests you can add caps to your account to stop any downloads after a certain dollar amount: https://help.backblaze.com/hc/en-us/articles/217931138-How-to-use-B2-data-caps-alerts

    如果直接刷完了源桶免费额度,应该是直接禁止访问直到第二天免费额度复原。或者绑定信用卡并且设置每天额度。它不会导致达到额度只发警告然后无限扣费(个人没主动试过)。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1853 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:30 · PVG 00:30 · LAX 09:30 · JFK 12:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.