CVE-2023-49735

news2024/11/17 23:40:33

前言:

最近扫描碰到了 CVE-2023-49735漏洞,但是网上一搜发现没有一个对这个漏洞研究的,那我就当个挖井人挖一下这个漏洞,首先我们要了解tiles

org.apache.tiles提供了一种强大而灵活的方式来构建和管理 Java Web 应用程序的视图层。通过视图组合、模板支持、动态内容加载和国际化支持,Tiles 帮助开发者提高开发效率,简化应用程序的维护。

Tiles 可以与国际化(i18n)框架结合使用,根据用户的语言偏好动态加载内容。这使得开发多语言支持的应用程序变得更加简单。

这次的漏洞主要出在国际化操作中,由于官方已经停止维护CVE-2023-49735在最新版3.0.8同样存在,所以只要是调用tiles进行国际化操作的均存在该漏洞:

漏洞详情:

首先来看下 CVE-2023-49735漏洞官方给的解释:

分配时不受支持 在解析 XML 定义文件时,在会话上设置为 DefaultLocaleResolver.LOCALE_KEY 属性的值未得到验证,从而导致在将用户控制的数据传递给此键时可能发生路径遍历并最终导致 SSRF/XXE。将用户控制的数据传递给此键可能相对常见,因为它也被用于在 Tiles 附带的 'tiles-test' 应用程序中设置语言。此问题会影响版本 2 及更高版本的 Apache Tiles。注意:此漏洞仅影响维护者不再支持的产品。

所以可以知道该漏洞存在于DefaultLocaleResolver.LOCALE_KEY属性值没有做校验,进而会导致SSRF或XXE漏洞,下面我们看下具体的漏洞点

漏洞点就位于此处 request.getRequestLocale()方法,当用户发送 HTTP 请求时,浏览器会包含一个 Accept-Language 请求头,该请求头指示用户的语言偏好。request.getRequestLocale() 方法会解析这个请求头,并返回一个适合的 Locale 对象。

这里可以发现对获取到的内容没有任何的过滤就进行了返回,正常情况下发送的是如下数据:

GET /api/resource HTTP/1.1
Host: example.com
Accept-Language: en_US

但是如果这个时候如果我们发送的数据是如下这样,替换为file:///etc/passwd:

GET /api/resource HTTP/1.1
Host: example.com
Accept-Language: file:///etc/passwd

并且在通过  request.getRequestLocale()获取到以后进行后续操作的时候同样没有校验,默认为可信,进行了如下操作,就会触发xxe漏洞

<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<foo>&xxe;</foo>

所以当应用程序将 Locale 的值用于动态加载资源文件或进行其他处理。如果 Locale 的值被用于构造 XML 或其他数据格式,且没有合理的过滤或验证,攻击者的输入可能会被传递到后续处理逻辑中。

漏洞总结:

所以单单使用Tiles但是如果没有使用国际化功能,是不会触发该漏洞,该漏洞的本质就是获取Locale时没有校验,且Locale是前端可控的值,如果后续操作中并未对该值进行校验并且碰巧Locale 的值被用于构造 XML 或其他数据格式,则就有可能触发SSRF/XXE漏洞

漏洞修复:

其实漏洞的修复很简单,如果是针对tiles-core进行修复,但是这有个问题,我们要不就针对名称进行过滤,要不就是针对长度进行过滤,但如果项目有一些特殊的语言或者覆盖不全则会有业务bug:

import org.apache.tiles.locale.LocaleResolver;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;

public class DefaultLocaleResolver implements LocaleResolver {
    public static final String LOCALE_KEY = "org.apache.tiles.LOCALE";
    private static final Set<String> ALLOWED_LANGUAGES = new HashSet<>();

    static {
        // 初始化允许的语言列表
        ALLOWED_LANGUAGES.add("en"); // 英语
        ALLOWED_LANGUAGES.add("fr"); // 法语
        ALLOWED_LANGUAGES.add("de"); // 德语
        ALLOWED_LANGUAGES.add("es"); // 西班牙语
        ALLOWED_LANGUAGES.add("zh"); // 中文
        // 可以根据需要添加更多语言
    }

    @Override
    public Locale resolveLocale(Request request) {
        Locale retValue = null;
        Map<String, Object> session = request.getContext("session");

        // 从会话中获取 Locale
        if (session != null) {
            retValue = (Locale) session.get(LOCALE_KEY);
        }

        // 如果会话中没有找到,则尝试从请求中获取
        if (retValue == null) {
            retValue = request.getRequestLocale();
        }

        // 校验 Locale 是否有效
        if (!isValidLocale(retValue)) {
            // 如果无效,返回默认的 Locale(例如,英语-美国)
            retValue = Locale.US; // 或者其他合适的默认值
        }

        return retValue;
    }

    // 通用的 Locale 校验方法
    private boolean isValidLocale(Locale locale) {
        // 检查 locale 是否为 null
        if (locale == null) {
            return false;
        }

        // 检查语言是否在允许的列表中
        return ALLOWED_LANGUAGES.contains(locale.getLanguage());
    }
}

所以更建议在项目代码测在使用Locale之前根据项目本身情况进行白名单校验,并且禁用外部实体解析,以防止 XXE 攻击

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2170441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#中的Modbus Ascii报文

C#中的Modbus Ascii报文的结构 Modbus ASCII报文结构遵循一定的规则&#xff0c;以确保数据的正确传输和识别。在C#中实现Modbus ASCII通信时&#xff0c;理解这些结构是非常重要的。以下是Modbus ASCII报文的基本结构&#xff1a; 起始字符&#xff1a;每个Modbus ASCII帧以冒…

TypeScript 设计模式之【观察者模式】

文章目录 观察者模式&#xff1a;构建灵活响应的事件通知系统观察者模式的奥秘观察者模式有什么利与弊?如何使用观察者模式来优化你的系统代码实现案例观察者模式的主要优点观察者模式的主要缺点观察者模式的适用场景总结 观察者模式&#xff1a;构建灵活响应的事件通知系统 …

Mortise AI编程智能体产品 | OPENAIGC开发者大赛企业组AI创作力奖

在第二届拯救者杯OPENAIGC开发者大赛中&#xff0c;涌现出一批技术突出、创意卓越的作品。为了让这些优秀项目被更多人看到&#xff0c;我们特意开设了优秀作品报道专栏&#xff0c;旨在展示其独特之处和开发者的精彩故事。 无论您是技术专家还是爱好者&#xff0c;希望能带给…

华为 HCIP-Datacom H12-821 题库 (28)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1.使用 NAT 技术&#xff0c;只可以对数据报文中的网络层信息&#xff08;IP 地址&#xff09…

贴片式TF卡(SD NAND)参考设计

【MK 方德】贴片 TF 卡参考设计 一、电路设计 1、 参考电路&#xff1a; R1~R5 (10K-100 kΩ)是上拉电阻&#xff0c;当 SD NAND 处于高阻抗模式时&#xff0c;保护 CMD 和 DAT 线免受总线浮动。 即使主机使用 SD NAND SD 模式下的 1 位模式&#xff0c;主机也应通过上拉电阻…

Type-C接口桌面显示器的优势

随着科技的飞速发展&#xff0c;电子设备的连接性、便捷性和高效性成为了消费者关注的重点。在这个背景下&#xff0c;Type-C接口桌面显示器以其卓越的性能和广泛的兼容性&#xff0c;正逐步成为市场上的主流选择。本文将深入探讨Type-C接口桌面显示器的优势、应用场景、市场现…

【大模型-驯化】成功解决载cuda-11.8配置下搭建swift框架

【大模型-驯化】成功解决载cuda-11.8配置下搭建swift框架 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微信公众号 &…

传奇微端黑屏不更新地图?传奇微端架设教程——GOM引擎

登录器和网站配置好后&#xff0c;我们进入游戏后会发现是黑屏的&#xff0c;更新不了地图和NPC这些&#xff0c;因为还没有做微端&#xff0c;会黑屏也是正常的。有些老G做了微端但是还是黑屏&#xff0c;就可能是你的微端架设出现了问题&#xff0c;可以参考以下教程。 gom引…

顶顶通呼叫中心中间件-机器人话术挂机后是否处理完成事件

前言 问题&#xff1a;机器人放音的过程中&#xff0c;如果用户直接挂机就会继续匹配下一个流程&#xff0c;如果匹配上的是放音节点&#xff0c;还会进行放音&#xff0c;那么在数据库表中就会多出一条放音记录。 解决方法 一、话术添加一个全局挂机节点 需要在话术中添加一…

多维时序 | GWO-VMD-SSA-LSTM灰狼优化变分模态分解联合麻雀优化长短期记忆网络多变量时间序列光伏功率预测(Matlab)

多维时序 | GWO-VMD-SSA-LSTM灰狼优化变分模态分解联合麻雀优化长短期记忆网络多变量时间序列光伏功率预测 目录 多维时序 | GWO-VMD-SSA-LSTM灰狼优化变分模态分解联合麻雀优化长短期记忆网络多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 …

python-4-4-编程规范2

str1 ,str2 input("请输入两个学生的姓名&#xff0c;用空格分开").split() print(str1) print(str2)print("hello python")name "Jim" print("His name is :",name)a "hello" b "python" print(a,b)print(&q…

如何搭建自动化测试框架(完整版)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 最近好多小伙伴都在说接口自动化测试&#xff0c;那么究竟什么是接口自动化测试呢&#xff1f;让我们一起往下看就知道了&#xff0c;首先我们得先弄清楚下面这个问…

做谷歌seo,什么是合理的谷歌url结构?

合理的URL结构至关重要&#xff0c;它不仅影响搜索引擎的索引效果&#xff0c;还直接关系到用户的浏览体验&#xff0c;跟国内做seo不同&#xff0c;链接里的英文也是能作为关键词使用的&#xff0c;谷歌不仅依赖于页面内容来判断页面相关性&#xff0c;URL中的文字也能为其提供…

招联金融秋招-2025

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策划 产品运营…

飞轮科技携手观测云亮相云栖大会,全方位展示阿里云数据库 SelectDB 版核心优势

9 月 19 日 - 21 日&#xff0c;以「云启智跃&#xff0c;产业蝶变」为主题的阿里云 2024 云栖大会在杭州云栖小镇顺利举办。大会设有三大主论坛、400 多个分论坛&#xff0c;并开放 4 万平方米的智能科技展区。作为中国云计算产业链的年度盛会&#xff0c;云栖大会已连续举办 …

unity 打包安卓 RenderTexture显示红色

1、ColorFarmat&#xff1a; 每个图形卡可能并不支持跨格式的所有用法。使用 SystemInfo.IsFormatSupported 可以检查图形卡支持的用法。 None未指定格式。R8G8B8A8_UNorm一种四分量、32 位无符号归一化格式&#xff0c;在字节 0 中具有 8 位 R 分量&#xff0c;在字节 1 中具…

算法-分治和逆序

分治法&#xff08;Divide and Conquer&#xff09;是一种重要的算法设计范式&#xff0c;它通过将复杂的问题分解成更小、更易于管理和解决的子问题&#xff0c;然后递归地解决这些子问题&#xff0c;最后将子问题的解合并以得到原问题的解。分治法通常用于排序、搜索、数学计…

Centos怎么执行脚本

方法一&#xff1a;切换到shell脚本所在的目录&#xff08;此时&#xff0c;称为工作目录&#xff09;执行shell脚本 cd /data/shell ./hello.sh 方法二&#xff1a;以绝对路径的方式去执行bash shell脚本 /data/shell/hello.sh 方法三&#xff1a;直接使用bash 或sh 来执行…

消费类摄像头热销海内外,萤石出货量全球排名第一

随着消费者对家庭安全、便捷生活的需求日益增长&#xff0c;智能摄像头作为智能家居的重要组成部分&#xff0c;其市场需求将持续扩大。 IDC《全球智能家居设备市场季度跟踪报告&#xff0c;2024年第二季度》显示&#xff0c;二季度全球智能摄像头市场&#xff08;包含消费级室…

足球预测模型理论:足球数据分析——XGBoost算法实战

简介&#xff1a;本文将探讨如何使用XGBoost算法进行足球数据分析&#xff0c;特别是足球运动员身价估计。我们将通过实例和生动的语言&#xff0c;解释XGBoost算法的原理和实际应用&#xff0c;帮助读者理解复杂的技术概念&#xff0c;并提供可操作的建议和解决问题的方法。 足…