Rand函数引发的安全问题 —— OSSN任意文件读取漏洞(CVE-2020-10560)
字数 1575 2025-08-25 22:58:34

OSSN任意文件读取漏洞分析(CVE-2020-10560)

漏洞概述

Open Source Social Network(OSSN)是一款用PHP编写的社交网络软件,允许用户创建社交网站。在5.3之前的版本中,存在一个任意文件读取漏洞(CVE-2020-10560),攻击者可以利用该漏洞读取服务器上的任意文件。

漏洞背景

  • 软件名称:Open Source Social Network (OSSN)
  • 影响版本:5.3之前的所有版本
  • 漏洞类型:任意文件读取
  • CVE编号:CVE-2020-10560
  • 官方网址:https://www.opensource-socialnetwork.org/

漏洞原理

漏洞源于OSSN生成的Site_Key强度过低,可以被暴力破解。攻击者成功破解Site_Key后,可利用该密钥构造任意文件读取链接,通过components/OssnComments/ossn_com.php文件提供的文件预览接口读取服务器上的任意文件。

技术分析

漏洞触发点

  1. 评论功能中的图片上传

    • 用户可以在评论中上传图片和表情
    • 上传后会生成临时预览图片,存储在tmp目录
    • 预览图片通过comment/staticimage接口访问
  2. 文件读取流程

    http://[target]/comment/staticimage?image=[base64_encoded_string]
    
    • image参数是文件路径的加密形式
    • 后台代码位于components/OssnComments/ossn_com.php
  3. 代码分析

    • 获取image参数并进行两次base64解码
    • 使用ossn_string_decrypt方法解密获取文件地址
    • 通过ossn_validate_filepath验证文件路径
    • 使用file_get_contents读取文件内容并输出

关键安全问题

  1. Site_Key生成机制不安全

    • Site_Key通过rand()函数生成随机数
    • 在Windows上RAND_MAX仅为32767
    • 在Linux上RAND_MAX为2147483647
    • 生成算法:
      // 以"ossn"开头
      // 生成随机数并拼接到"ossn"后
      // 计算MD5值
      // 取字符3-11作为site_key值
      
  2. 身份验证缺失

    • 文件读取接口未进行身份验证
    • 未登录用户也可访问
  3. 路径验证不充分

    • 虽然过滤了../防止目录遍历
    • 但仍可通过绝对路径读取文件(如/etc/passwd

漏洞利用

攻击步骤

  1. 获取初始加密字符串

    • 上传一张图片但不发布评论
    • 获取预览链接中的image参数值
  2. 暴力破解Site_Key

    • 枚举所有可能的随机数(0-2147483647)
    • 计算对应的site_key值
    • 尝试解密image参数
    • 检查解密结果是否包含tmp/photos字符串
  3. 构造恶意请求

    • 使用破解的site_key加密目标文件路径
    • 通过comment/staticimage接口读取文件

利用工具

  1. Site_Key计算工具
    https://github.com/LucidUnicorn/CVE-2020-10560-Key-Recovery

  2. 加密解密工具
    https://github.com/kevthehermit/CVE-2020-10560

修复建议

  1. 升级到最新版本:OSSN 5.3及更高版本已修复此漏洞

  2. 代码层面修复

    • 使用加密安全的随机数生成器(如random_int()openssl_random_pseudo_bytes()
    • 增加接口的身份验证
    • 加强文件路径验证,禁止绝对路径访问
  3. 临时缓解措施

    • 限制comment/staticimage接口的访问权限
    • 监控异常的文件访问请求

总结

该漏洞展示了弱随机数生成在安全系统中的危害,以及未授权访问接口的风险。开发人员应避免使用rand()等非加密安全的随机数生成器,并对所有文件操作接口实施严格的访问控制和输入验证。

OSSN任意文件读取漏洞分析(CVE-2020-10560) 漏洞概述 Open Source Social Network(OSSN)是一款用PHP编写的社交网络软件,允许用户创建社交网站。在5.3之前的版本中,存在一个任意文件读取漏洞(CVE-2020-10560),攻击者可以利用该漏洞读取服务器上的任意文件。 漏洞背景 软件名称 :Open Source Social Network (OSSN) 影响版本 :5.3之前的所有版本 漏洞类型 :任意文件读取 CVE编号 :CVE-2020-10560 官方网址 :https://www.opensource-socialnetwork.org/ 漏洞原理 漏洞源于OSSN生成的Site_ Key强度过低,可以被暴力破解。攻击者成功破解Site_ Key后,可利用该密钥构造任意文件读取链接,通过 components/OssnComments/ossn_com.php 文件提供的文件预览接口读取服务器上的任意文件。 技术分析 漏洞触发点 评论功能中的图片上传 : 用户可以在评论中上传图片和表情 上传后会生成临时预览图片,存储在 tmp 目录 预览图片通过 comment/staticimage 接口访问 文件读取流程 : image 参数是文件路径的加密形式 后台代码位于 components/OssnComments/ossn_com.php 代码分析 : 获取 image 参数并进行两次base64解码 使用 ossn_string_decrypt 方法解密获取文件地址 通过 ossn_validate_filepath 验证文件路径 使用 file_get_contents 读取文件内容并输出 关键安全问题 Site_ Key生成机制不安全 : Site_ Key通过 rand() 函数生成随机数 在Windows上 RAND_MAX 仅为32767 在Linux上 RAND_MAX 为2147483647 生成算法: 身份验证缺失 : 文件读取接口未进行身份验证 未登录用户也可访问 路径验证不充分 : 虽然过滤了 ../ 防止目录遍历 但仍可通过绝对路径读取文件(如 /etc/passwd ) 漏洞利用 攻击步骤 获取初始加密字符串 : 上传一张图片但不发布评论 获取预览链接中的 image 参数值 暴力破解Site_ Key : 枚举所有可能的随机数(0-2147483647) 计算对应的site_ key值 尝试解密 image 参数 检查解密结果是否包含 tmp/photos 字符串 构造恶意请求 : 使用破解的site_ key加密目标文件路径 通过 comment/staticimage 接口读取文件 利用工具 Site_ Key计算工具 : https://github.com/LucidUnicorn/CVE-2020-10560-Key-Recovery 加密解密工具 : https://github.com/kevthehermit/CVE-2020-10560 修复建议 升级到最新版本 :OSSN 5.3及更高版本已修复此漏洞 代码层面修复 : 使用加密安全的随机数生成器(如 random_int() 或 openssl_random_pseudo_bytes() ) 增加接口的身份验证 加强文件路径验证,禁止绝对路径访问 临时缓解措施 : 限制 comment/staticimage 接口的访问权限 监控异常的文件访问请求 总结 该漏洞展示了弱随机数生成在安全系统中的危害,以及未授权访问接口的风险。开发人员应避免使用 rand() 等非加密安全的随机数生成器,并对所有文件操作接口实施严格的访问控制和输入验证。