当前位置: 首页 > article >正文

别再乱用Freemarker了!从Jeecg-Boot的CVE-2023-4450漏洞,聊聊SQL解析中的代码注入风险

从CVE-2023-4450看动态SQL解析的安全陷阱Freemarker模板引擎的致命误用在快速迭代的企业级开发中报表功能往往被视为非核心模块而被草率实现。2023年曝光的Jeecg-Boot漏洞(CVE-2023-4450)给我们上了一课——一个未授权接口中的Freemarker误用竟能让攻击者直接获得服务器root权限。这不仅是某个框架的个案更是暴露了开发者在动态SQL处理时的系统性安全盲区。1. 漏洞解剖当SQL解析遇上FreemarkerJeecg-Boot的/jmreport/queryFieldBySql接口本意是提供灵活的报表字段查询功能却因三个致命设计缺陷沦为RCE通道未授权访问接口未做任何身份校验原始SQL拼接直接将用户输入的SQL片段拼接到查询语句危险模板函数使用Freemarker的?new()执行任意类实例化攻击者只需发送如下精心构造的请求即可执行系统命令{ sql: select #assign ex\freemarker.template.utility.Execute\?new() ${ ex(\whoami\) } }这个案例中Freemarker不再是简单的模板引擎而是变成了攻击者的代码执行沙箱。其核心威胁来自两个特性?new()函数允许实例化任意Java类表达式求值动态执行字符串内容2. Freemarker的安全雷区比想象更危险许多开发者认为模板引擎只是无害的文本处理器但Freemarker的这几个特性在错误使用时极其危险危险特性风险等级典型误用场景?new()致命实例化Runtime/ProcessBuilderClass.forName()高危动态加载恶意类include指令中高危包含服务器敏感文件宏定义中危注入恶意逻辑代码特别值得注意的是即使禁用?new()以下表达式仍然可能造成信息泄露#assign uriobject.getClass().getResource(/).toURI() ${uri}3. 安全编码实践从防御到设计3.1 输入过滤的局限性常见的黑名单过滤方式存在根本缺陷// 不安全的过滤示例 if (sql.contains(?new()) || sql.contains(Runtime)) { throw new IllegalArgumentException(); }攻击者可以通过以下方式绕过Unicode编码\u003fnew()字符串拼接freemarker.template.utility.concat(Execute)反射调用getClass().getClassLoader().loadClass()3.2 白名单参数化方案安全的实现应包含以下层次接口权限控制PreAuthorize(hasRole(REPORT_VIEWER)) PostMapping(/queryFieldBySql) public Result? queryFieldBySql(RequestBody ReportQueryDTO dto) { // ... }SQL参数化处理String safeSql SELECT * FROM report WHERE id ?; jdbcTemplate.query(safeSql, new Object[]{dto.getSqlParam()});Freemarker安全配置# application.properties spring.freemarker.settings.new_builtin_class_resolverrestrictive spring.freemarker.settings.template_exception_handlerrethrow3.3 架构级解决方案对于需要动态SQL的报表系统建议采用以下架构[前端] → [参数校验层] → [SQL模板引擎] → [预编译执行] ↓ [行为审计日志]其中SQL模板引擎应仅支持特定语法子集禁用所有反射功能实现语法树静态分析4. 企业级防御体系构建单点修复远远不够需要建立全链路防护开发阶段安全编码培训组件安全评估清单自动化SAST扫描测试阶段# 使用OWASP ZAP进行API测试 zap-cli active-scan -r http://localhost:8080/api/运行阶段部署RASP防护网络层命令执行检测最小权限容器化某金融企业的实际防护方案显示多层防御可拦截99.7%的注入攻击网络防火墙 → WAF → 应用权限控制 → 参数校验 → 安全SQL组件 → 数据库审计5. 漏洞排查清单立即检查你的项目是否存在以下风险[ ] 是否直接拼接用户输入到SQL[ ] 是否使用?new()等危险模板函数[ ] 是否配置了Freemarker的安全选项[ ] 是否对报表接口进行权限控制[ ] 是否记录所有动态查询日志对于使用Jeecg-Boot的项目紧急措施包括升级到JimuReport 1.6.1临时禁用queryFieldBySql接口审查所有使用Freemarker的代码在最近一次内部审计中我们发现即使是一些看似无害的配置项如允许模板包含外部文件也可能成为攻击突破口。安全无小事每个设计决策都需要以最坏情况为前提进行验证。

相关文章:

别再乱用Freemarker了!从Jeecg-Boot的CVE-2023-4450漏洞,聊聊SQL解析中的代码注入风险

从CVE-2023-4450看动态SQL解析的安全陷阱:Freemarker模板引擎的致命误用 在快速迭代的企业级开发中,报表功能往往被视为"非核心模块"而被草率实现。2023年曝光的Jeecg-Boot漏洞(CVE-2023-4450)给我们上了一课——一个未授权接口中的Freemarker…...

mT5中文-base零样本增强模型效果展示:客服对话意图泛化与槽位值增强案例

mT5中文-base零样本增强模型效果展示:客服对话意图泛化与槽位值增强案例 1. 模型能力概览 mT5中文-base零样本增强模型是一个专门针对中文文本增强优化的AI模型。它在原有mT5模型基础上,使用了大量中文数据进行深度训练,并引入了创新的零样…...

地热模拟实战:当岩石遇上高温水流

Comsol地热开采-热流固耦合(两个模型,均质和裂隙岩体)附赠参考文献。地热开采就像给地球做"针灸",要在不透水的花岗岩里造出人工热储层。最近用COMSOL折腾了两个典型模型:人畜无害的均质岩体和自带裂隙的破碎…...

RWKV7-1.5B-g1a实操手册:curl命令调用generate接口+参数组合避坑指南

RWKV7-1.5B-g1a实操手册:curl命令调用generate接口参数组合避坑指南 1. 模型简介 rwkv7-1.5B-g1a 是基于RWKV-7架构的多语言文本生成模型,特别适合以下场景: 基础问答文案续写简短总结轻量中文对话 这个1.5B参数的版本在单卡24GB显存的GPU…...

【PyO3/Rust-Python测试权威框架】:Rust生态下Python扩展的零信任CI流水线设计

第一章:Python 扩展模块测试Python 扩展模块(如用 C/C、Rust 或 Cython 编写的模块)在提升性能的同时,也引入了跨语言交互的复杂性。对其开展系统性测试,是保障功能正确性、内存安全性和 ABI 兼容性的关键环节。测试环…...

人工智能入门全景图:Nanbeige 4.1-3B带你梳理AI核心概念与技术栈

人工智能入门全景图:Nanbeige 4.1-3B带你梳理AI核心概念与技术栈 你是不是也对人工智能充满好奇,但一看到那些复杂的术语和庞大的技术栈就感到无从下手?机器学习、深度学习、神经网络、NLP、CV……这些词听起来很酷,但它们到底是…...

经典蓝牙Sniff Mode的功耗优化策略与应用场景解析

1. 经典蓝牙Sniff Mode基础原理 蓝牙设备在保持连接状态时,即使没有数据传输也会定期交换POLL-NULL数据包来维持链路。这种机制虽然保证了连接稳定性,却带来了不必要的功耗开销。Sniff Mode就像给蓝牙设备装了个"智能闹钟"——平时让设备睡觉&…...

基于LSTM时间序列预测思想优化百川2-13B的对话连贯性

基于LSTM时间序列预测思想优化百川2-13B的对话连贯性 你有没有遇到过这种情况?和一个大模型聊得正起劲,聊了十几轮甚至几十轮之后,你突然发现,它好像“失忆”了。你之前明明告诉过它你的名字、你的职业,甚至你们刚刚讨…...

2026年重庆桶装水工厂,这些经营要点与避坑指南你知道吗?

2026 年,在重庆经营桶装水工厂,面临不少挑战和机遇。重庆水木华桶装水厂家有多年相关经验,能帮你少走弯路。下面就为你分享经营要点和避坑指南。常见经营痛点很多桶装水工厂老板都有过这样的经历。水质把控不好,容易出现异味、浑浊…...

本科生 AI 写论文天花板!Paperxie 智能写作:从选题到成稿全流程,零焦虑搞定毕业论文

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AIPPThttps://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 一、写在前面:毕业论文,为什么成了本科生的 “年度噩梦”? 每年毕业季&#x…...

5分钟快速搭建你的第一个Gemini AI智能体应用:完整开发指南

5分钟快速搭建你的第一个Gemini AI智能体应用:完整开发指南 【免费下载链接】gemini-fullstack-langgraph-quickstart Get started with building Fullstack Agents using Gemini 2.5 and LangGraph 项目地址: https://gitcode.com/gh_mirrors/ge/gemini-fullstac…...

终极指南:如何用F3工具3分钟识别U盘和SD卡的真实容量

终极指南:如何用F3工具3分钟识别U盘和SD卡的真实容量 【免费下载链接】f3 F3 - Fight Flash Fraud 项目地址: https://gitcode.com/gh_mirrors/f3/f3 亲爱的朋友,你是否曾经怀疑过自己购买的U盘或SD卡容量是否真实?在数字时代&#xf…...

Hunyuan-MT-7B应用实践:出版社AI辅助审校系统——中英日韩多语对照翻译

Hunyuan-MT-7B应用实践:出版社AI辅助审校系统——中英日韩多语对照翻译 1. 项目背景与需求 在全球化出版时代,出版社经常需要处理多语言内容的翻译和审校工作。传统的人工翻译流程存在效率低、成本高、一致性差等问题,特别是当中英日韩等多…...

Flutter开发踩坑记:CocoaPods安装失败全流程解决方案(含Ruby版本升级)

Flutter开发实战:CocoaPods安装失败的系统级解决方案 当你满怀期待地运行flutter doctor准备大展身手时,屏幕上突然跳出"CocoaPods not installed"的红色警告,这种挫败感每个Flutter开发者都深有体会。不同于简单的"安装-运行…...

RDF实战指南:从入门到精通

1. RDF基础入门:从概念到实战 第一次接触RDF时,我也被那些专业术语搞得一头雾水。直到把它想象成"资源界的快递单",才突然开窍——就像快递单记录着"谁寄了什么给谁",RDF用主语-谓语-宾语的三元组记录着"…...

图像标注难题如何破解?LabelImg工具全面解析与实战指南

图像标注难题如何破解?LabelImg工具全面解析与实战指南 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check out L…...

别再只卷CNN了!用强化学习(RL)给YOLOv5打个辅助,实现工业零件精准定位(附PyTorch代码)

强化学习与YOLOv5的协同优化:工业零件精准定位实战指南 工业质检领域对目标检测的精度要求近乎苛刻——0.1毫米的定位偏差可能导致整个批次的报废。当传统YOLOv5在复杂场景下遇到瓶颈时,强化学习(RL)的决策能力可以成为突破精度天花板的关键辅助。本文将…...

排序算法---(四)

引言在前几篇文章里面讲到了六种排序,今天来讲一下剩下两种:基数排序、堆排序基数排序1.思路(1)首先确定最大数的位数:找到待排序数组中的最大数,并确定其位数(2)将元素按照相应的位…...

SQL调优实战手册:索引、并行、参数调优一站式解决方案

做企业级业务开发久了,都会碰到同一个难题:数据量越积越多,原本跑得顺畅的SQL慢慢开始变慢,轻则接口响应延迟,重则整个系统卡顿,甚至影响核心业务流转。尤其是用KingbaseES这款国产企业级数据库&#xff08…...

告别跨平台存储难题:exfat-nofuse内核驱动深度实战指南

告别跨平台存储难题:exfat-nofuse内核驱动深度实战指南 【免费下载链接】exfat-nofuse Android ARM Linux non-fuse read/write kernel driver for exFat and VFat Android file systems 项目地址: https://gitcode.com/gh_mirrors/ex/exfat-nofuse 在Linux与…...

Youtu-VL-4B-Instruct图文理解效果集锦:源码部署后生成100+张高质量图片描述样例

Youtu-VL-4B-Instruct图文理解效果集锦:源码部署后生成100张高质量图片描述样例 1. 引言:一个能“看懂”图片的AI助手 想象一下,你随手拍了一张照片,发给一个朋友,他不仅能告诉你照片里有什么,还能分析场…...

3步解决AtlasOS中Xbox控制器驱动问题:从连接失败到畅玩游戏

3步解决AtlasOS中Xbox控制器驱动问题:从连接失败到畅玩游戏 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/…...

利用M2LOrder实现安全高效的内网穿透方案设计与验证

利用M2LOrder实现安全高效的内网穿透方案设计与验证 1. 引言 你有没有遇到过这样的麻烦事?自己电脑上开发了一个网站或者服务,想给同事或者客户临时看一下效果,结果发现对方根本访问不了。原因很简单,你的服务跑在公司的内网或者…...

【技术解析】MapReduce:大规模集群上的高效数据处理框架

1. MapReduce框架的核心思想 第一次听说MapReduce时,我正被一个TB级日志分析任务折磨得焦头烂额。传统单机处理需要几十个小时,而当我用上这个框架后,同样任务在200台机器上仅用23分钟就完成了。这种化腐朽为神奇的体验,让我彻底理…...

别再手动复制数组了!用NumPy广播机制5分钟搞定形状不同的数组运算

NumPy广播机制:告别低效循环,用智能扩展提升数组运算效率 你是否曾在处理数据时遇到过这样的场景:需要将一个34的矩阵与一个14的行向量相加,结果却因为维度不匹配而报错?大多数Python初学者会本能地选择用循环或复制数…...

终极指南:用WinDiskWriter在Mac上制作Windows启动盘,简单三步搞定

终极指南:用WinDiskWriter在Mac上制作Windows启动盘,简单三步搞定 【免费下载链接】windiskwriter 🖥 A macOS app that creates bootable USB drives for Windows. 🛠 Patches Windows 11 to bypass TPM and Secure Boot require…...

矩阵按键扫描技术对比:行列扫描与反转扫描的实战解析

1. 矩阵按键扫描技术入门指南 第一次接触矩阵按键时,我完全被那些交叉的行列线搞晕了。直到在某个深夜调试项目时,才突然理解了这个设计的精妙之处——它就像城市道路的十字路口,通过行列坐标就能精准定位每个按键位置。这种设计让16个按键只…...

Awoo Installer:多场景文件部署的跨平台解决方案

Awoo Installer:多场景文件部署的跨平台解决方案 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 问题诊断:Nintendo Switch…...

OFA图像描述模型在STM32嵌入式系统的边缘计算应用

OFA图像描述模型在STM32嵌入式系统的边缘计算应用 让嵌入式设备也能"看懂"世界并说出来 1. 项目背景与需求 你有没有想过,让一个小小的嵌入式设备不仅能"看到"图像,还能用语言描述出它看到了什么?这听起来像是科幻电影里…...

LFM2.5-1.2B-Thinking-GGUF快速上手:使用Ollama本地化部署与管理

LFM2.5-1.2B-Thinking-GGUF快速上手:使用Ollama本地化部署与管理 1. 前言:为什么选择Ollama部署本地大模型 最近大语言模型越来越火,但很多朋友发现云端服务要么太贵,要么有隐私顾虑。今天给大家介绍一个超简单的本地部署方案—…...