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

fastjson 又爆 bug 了!快来看看是否受影响

  •  2
     
  •   siiiagtb · 32 天前 · 10406 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。
    77 条回复    2020-06-02 13:37:40 +08:00
    jk1030
        1
    jk1030   32 天前   ❤️ 7
    bugjson
    sagaxu
        2
    sagaxu   32 天前 via Android
    出于什么考量用这个库呢?
    raphael008
        3
    raphael008   32 天前
    jackson 不香吗?
    qwerthhusn
        4
    qwerthhusn   32 天前
    感觉这个库从 N 多年前就各种各样安全漏洞。。。

    但是 jackson 的话,不支持 JSONArray 和 JSONObject 抽象。
    有时候不想对某些 json 再做模型定义,然后用 JsonNode 的 API 太麻烦,全程用 LinkedHashMap 和 ArrayList 写起来也不太好看。
    yty2012g
        5
    yty2012g   32 天前
    已经因为 bugjson,升了 N 次版本了。。。
    AngryMagikarp
        6
    AngryMagikarp   32 天前   ❤️ 1
    没用过,不过很奇怪,一个 JSON 库什么会有安全漏洞...
    smartdone
        7
    smartdone   32 天前
    @AngryMagikarp 反序列化
    GM
        8
    GM   32 天前   ❤️ 1
    @qwerthhusn JsonNode 很好用,超级方便,你是没领悟到它正确用法。
    movistar
        9
    movistar   32 天前
    Jackson 也一堆漏洞,经常有报 case....
    别以为用 jackson 就安全啊.....
    ZSeptember
        10
    ZSeptember   32 天前
    @raphael008 哈哈哈哈,jackson 多少安全漏洞,国内没有报导而已。
    micean
        11
    micean   32 天前
    没影响,一直是 jackson
    ixx
        12
    ixx   32 天前
    @AngryMagikarp #6 因为 json 会用在参数解析上,可以构建特殊 json 远程执行代码....
    echo1937
        13
    echo1937   32 天前
    Spring 自带 Jackson,我又不喜欢额外引入过多依赖,一直就用 Jackson 了。

    这样有漏洞修补起来也轻松,直接升级 Spring 就行。
    qwerthhusn
        14
    qwerthhusn   32 天前
    @GM 额,我理解错了,我一直以为 JsonNode 就是那种 Low-Level 的语法,要解析各种 Token,刚刚仔细看了一下,和 fastjson 的 JSONArray 和 JSONObject 是类似的。。。。。。不过这套 API 没有 getArrayNode()或者 getObjectNode(),必须要先 get()获取父类,只能强转(或者用 instanceof 或者 getNodeType()检查一下)

    从今天开始,fastjson 对我来说,一点用都没了!!!我负责的项目下一个 milestone 中有一项就是 get rid of bugjson
    Kamiyu0087
        15
    Kamiyu0087   32 天前
    所以 FastJSON 和 Jackson 都不能用?
    那么 GSON 如何呢?
    onikage
        16
    onikage   32 天前
    上周五也被 bugjson 坑了, {"value":1,"id":2}, 在 bugjson 转一遍输出就变成{"id":2,"value":1}了, 信息没丢,但是在有签名的场景这完全是两个字符串. 不知道为什么这么多人迷信这玩意.
    murmur
        17
    murmur   32 天前
    @onikage 所以说你传 json 不会传字符串么,验签后再反序列化
    sagaxu
        18
    sagaxu   32 天前 via Android
    @Kamiyu0087 gson 官方已经弃坑了
    sagaxu
        19
    sagaxu   32 天前 via Android   ❤️ 5
    @onikage object 本就是无序的,签名前先排序不是常识吗?
    iFlicker
        20
    iFlicker   32 天前 via Android
    JSONObject 呢
    marcong95
        21
    marcong95   32 天前
    @onikage #16 JSONObject 理论上是个哈希表,应该是不保证顺序的,需要签名的场景一般不都是要先做排序的吗
    wobuhuicode
        22
    wobuhuicode   32 天前   ❤️ 1
    @onikage 明显是你自己对于 json 理解有问题。还能反咬一口框架
    axbx
        23
    axbx   32 天前
    @onikage 哈哈,上周也是遇到同样的问题
    yuzo555
        24
    yuzo555   32 天前   ❤️ 1
    @onikage 本来就是没有顺序的,还有的语言每次请求都随机顺序输出呢...
    GM
        25
    GM   32 天前   ❤️ 2
    @onikage 签名要自己做排序,这是常识。不然的话,出错是必然,工作正常只是偶然(碰巧能正常工作)。
    redtea
        26
    redtea   32 天前
    那么到底该用哪个,更安全,性能更好?
    beidounanxizi
        27
    beidounanxizi   32 天前
    fastjson 这个破 json 序列化和反序列化 遵守 json 规范么? 还有号称的性能 呵呵哒
    用 jackson 不好么
    whoami9894
        28
    whoami9894   32 天前
    @AngryMagikarp
    因为它支持 @type 把 JSON 映射到对象
    TomDu
        29
    TomDu   32 天前
    @sagaxu 官方有什么声明吗?我用得还挺多的= =
    beidounanxizi
        30
    beidounanxizi   32 天前
    @onikage 这个是你自己个人没保证顺序的原因
    heiheidewo
        31
    heiheidewo   32 天前
    一个 json 解析还这么多 bug
    hantsy
        32
    hantsy   32 天前
    @qwerthhusn Jackson 同样支持底层的强大 Node 操作(类似 Object, Array 操作非常简单),也支持高级的 Mapping,而且还支持 XML Mapping 。 还支持其它一些不太常见的格式。在 marshall/unmarshall 操作上,几乎是功能最全面的,在 Spring 是默认方案。

    现在的 JSON-P,JSON-B 标准受 Jackson,Gson,JAXB 等影响很大。
    hantsy
        33
    hantsy   32 天前
    Kyle18Tang
        34
    Kyle18Tang   32 天前
    Jackson 它不香么
    sagaxu
        35
    sagaxu   32 天前 via Android   ❤️ 1
    @TomDu 之前看到 gson 作者说过,开发基本上是停止了
    keshawnvan
        36
    keshawnvan   32 天前
    JSON 反序列化用哪个库漏洞都很多,都需要经常更新
    Vedar
        37
    Vedar   32 天前
    有点搞吧 验签排序确实是要做 但是你一个 json 库自作主张去排序就有毒了 这还能洗?
    Meltdown
        38
    Meltdown   32 天前 via Android
    龟速的 json 有 bug 么
    sayuria
        39
    sayuria   32 天前
    @AngryMagikarp
    比如一只猫,序列化之后是 binary 序列。binary 是没有可读性的,看起来就是一堆乱码。
    这时候黑客把一只狗序列化成 binary 序列,替换掉猫的序列。
    json 反序列化之后,就会去执行狗的反序列后的代码。
    kiddult
        40
    kiddult   32 天前
    @Vedar 不是去排序,而是这个对象映射是 map,本身就是无序的
    mgzu
        41
    mgzu   32 天前
    问一下各位老哥,有 maven 或 eclipse 、idea 插件提示依赖安全漏洞的插件么
    skull
        42
    skull   32 天前 via iPhone
    @onikage 你自己的坑
    wm5d8b
        43
    wm5d8b   32 天前 via Android
    gson 没有 bug 的话,开发基本停止好像也没问题?
    JasonLaw
        44
    JasonLaw   32 天前 via iPhone
    @sayuria 我还是有点不明白,就算替换了内容,那也是数据(对象的属性)改变了,代码执行的逻辑还是不变的。可以具体讲解一下“怎么造成安全漏洞”的吗?
    526326991
        45
    526326991   32 天前
    一直用 gson 路过~~~
    cco
        46
    cco   32 天前
    不管谁 bug 多,谁 bug 少。Spring 已经自带了 jackson,那我就懒得引入第三个 json,目前的业务也都满足。小声说:顶多在价格 gson- -!
    binbinyouliiii
        47
    binbinyouliiii   32 天前
    老老实实用 springboot 默认的 jackson 不好吗,一个 json 工具又不需要中文文档
    siteshen
        49
    siteshen   32 天前
    @yuzo555 Go:我怀疑你在说我,但是我没有证据。
    hjyjzsn
        50
    hjyjzsn   32 天前
    @onikage 一般签名场景 都会对字段重新进行排序的吧
    tairan2006
        51
    tairan2006   32 天前
    Jackson 啥功能都有啊…升级 spring 很方便。
    mars0prince
        52
    mars0prince   32 天前
    毕竟没有漏洞就没有 kpi
    liuawei
        53
    liuawei   32 天前
    那些一直推荐 Jackson 这个玩意也有漏洞 反序列化的漏洞可以通过 bash 反弹控制服务器呀。
    whoami9894
        54
    whoami9894   32 天前   ❤️ 2
    @JasonLaw
    JSON 映射到对象其实就是 build and assign,先实例化对象,然后对成员变量赋值,赋值时如果对象有 setXX 方法会调用,在 setXX 方法中可能有一些可以达到代码执行的操作 比如 JNDI injection
    比如`com.sun.rowset.JdbcRowSetImpl`,调用它的`setAutoCommit`时会自动对成员变量`dataSourceName`进行一次 JNDI lookup,在低版本 JDK 中就可以直接加载远程字节码
    kennylam777
        55
    kennylam777   32 天前
    @GM JsonNode + 1, 該有的 type safety 都有
    fanshuzaizai
        56
    fanshuzaizai   32 天前   ❤️ 1
    高级用法才有 bug,像我这种只用来 JSON.parseObject()和 JSON.toJSONString,从来没有 bug
    JasonLaw
        57
    JasonLaw   32 天前
    @whoami9894 产生对象的 class 是自己写的,setXX 能做什么不是完全由自己决定的吗?实例化 class 的一个对象后,会根据序列化之后的内容对属性设置不同的值。如果 setXX 方法除了赋值之外还做了“其他的事情”,不管是什么方式的反序列化,都会做“其他的事情”的呀😅,不会取决于“序列化的内容是否被修改”。是我哪里没有理解吗?😯
    Seneca
        58
    Seneca   32 天前
    良心福报厂 养活一批安全从业者
    lzvezr
        59
    lzvezr   32 天前 via Android
    @onikage 兄弟,你这是用法不对啊,哪有 JSON 不排序就做签名的
    stormsuncc
        60
    stormsuncc   32 天前
    上边说 jackjson 也有问题的不知道啥心理。
    下雨天没有伞房子还漏雨的人说你看隔壁也没伞出门(人家房子完好)。
    zhuzeitou
        61
    zhuzeitou   32 天前
    @sagaxu JakeWharton 最近的推上有说,gson 基本属于弃坑,2/3 的开发者参与了 moshi 开发,moshi 可以认为是 gson3
    onikage
        62
    onikage   32 天前
    @murmur
    client 和 server 端都在我们自己手里, 可以控制, 中间过了一道 http 的第三方的服务. 问题是这个服务输入输出不一致...
    不过这个第三方服务不出错.
    onikage
        63
    onikage   32 天前
    @wobuhuicode
    问题是中间过的第三方服务做的, 我们自己的 client 和 server 用 http 直连测过以后再连人家服务发现这个问题的.
    wzw
        64
    wzw   32 天前 via iPhone
    我用 msgpack……不知道怎么样
    ZSeptember
        65
    ZSeptember   32 天前
    @stormsuncc 不知道你是什么心理。都说转 jackson,提出 jackson 也有漏洞,有什么问题?国外的框架有漏洞不让说?
    LostPrayers
        66
    LostPrayers   32 天前
    没有高级反序列化,就没有伤害
    zzNucker
        67
    zzNucker   32 天前
    @ZSeptember 他都说了人家房子完好,说明是选择性失明+失智

    没啥好说的啦
    Loyelee
        68
    Loyelee   32 天前 via iPhone
    一直用的 gson
    qoras
        69
    qoras   32 天前
    这玩意不报 bug 才不正常
    back0893
        71
    back0893   32 天前
    有 bug 不是正常?
    youxiachai
        72
    youxiachai   32 天前 via iPad
    有点迷,这算是没关注比有关注强吗。。。。
    特别有几位大佬一个劲的批判也不知道为啥。。
    wanguorui123
        73
    wanguorui123   31 天前 via iPhone
    反序列化注入漏洞,年年都报
    ConradG
        74
    ConradG   31 天前
    @JasonLaw
    因为“产生对象的 class 是自己写的”这句话在某些情况下是不对的。
    除了常见的“标准”json 外,还存在“标记了反序列化目标类型“的非标准 json 。json 反序列化的大部分漏洞都是通过更改这类 json 的类型标记,实例化一些敏感类进行攻击。
    xuxanwan
        75
    xuxanwan   31 天前
    在哪里能看到 fastjson 所有历史缺陷,及 jackson 的所有历史缺陷,想坐下选型前的对比。
    lcj2class
        76
    lcj2class   31 天前 via iPhone
    对性能有要求的,直接上 protobuf 吧
    metrxqin
        77
    metrxqin   31 天前
    马上就 618 了,现在紧急更新等于找骂。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1038 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:08 · PVG 06:08 · LAX 15:08 · JFK 18:08
    ♥ Do have faith in what you're doing.