IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    从千年虫bug的问题谈开去

    Jimmy He发表于 2022-01-07 07:00:39
    love 0

    最近微软又爆了一个千年虫的bug,微软FIP-FS反恶意软件扫描引擎由于Year 2022漏洞导致Exchange服务器无法发送邮件。

    另外,本田、讴歌汽车也爆了Y2K22千年虫漏洞。

    这是因为,在程序中,或者数据库中,字段类型定义成int32字段类型。而int32,一共32位,第一位表示符号,因此可以表示数值大最大位是31位,即2147483647:
    1111111111111111111111111111111(二进制,31个1) —> 2147483647(十进制)

    2021年12月31日23点59分 —>windows,短年表示,精确到分,21年12月31日23点59分—>2112312359—–> 1111101111001110101010000100111
    下一分钟
    2022年1月1日0点1分 ——->windows,短年表示,精确到分,22年01月01日00点01分—>2201010001—–> 10000011001100001011111101010001 —> 超过 1111111111111111111111111111111(二进制),overflow,所以报错了。

     

    另外还有一个类似的问题,北京时间2038年1月19号11:14:07( UTC 时间2038年1月19日 03:14:07 )的问题。
    这是因为在某些系统中,比如mysql,timestamp类型的字段,长度也是被设计成int32。采用unixtime计时。unixtime按照秒来计算的话,31位的1,表示 2147483647秒,从unix time计时元年UTC 1970年1月1日0点0分0秒算起,2147483647秒之后,到了UTC 2038年1月19日03:14:07, overflow。

     

    目前mysql的该问题,还等待mysql在新版本中修复这个问题。



沪ICP备19023445号-2号
友情链接