Joomla Novarain/Tassos 框架漏洞允许 SQL 注入和未经身份验证的文件读取

2026-02-17 00:27:47 1 45

运行 Novarain/Tassos 框架的网站容易受到严重安全漏洞的影响,这些漏洞允许未经身份验证的文件读取、文件删除和 SQL 注入攻击 ,这可能会导致远程代码执行和未打补丁的系统上的管理员完全接管。




运行 Novarain/Tassos 框架的网站容易受到严重安全漏洞的影响,这些漏洞允许未经身份验证的文件读取、文件删除和 SQL 注入攻击 ,这可能会导致远程代码执行和未打补丁的系统上的管理员完全接管。

这些问题影响多个流行的 Tassos 扩展程序,需要通过供应商的更新版本进行紧急修补。

对共享的 Novarain/Tassos Framework 插件 (plg_system_nrframework) 的源代码审查发现,通过 AJAX 处理程序暴露了三个核心原语,该处理程序在处理 task=include 操作时没有进行适当的加固。

通过滥用此入口点,攻击者可以调用 Joomla 站点根目录下实现了 onAjax 方法的 PHP 类,从而有效地将内部辅助类变成可远程访问的小工具。

在这些小工具中,有一个类错误地处理了 CSV 加载,它可以被强制读取 Web 服务器用户可访问的任意文件。

而另一类则公开了一个删除操作,该操作会删除攻击者提供的路径,而无需额外的验证。

第三个类用于动态字段填充,它将攻击者控制的参数传递到数据库查询中,从而创建了一个 SQL 注入原语,能够在 Joomla 数据库帐户下进行任意表和列读取。

将这些功能串联起来,外部攻击者可以从数据库中窃取管理员会话数据,进而入侵后端,然后部署恶意扩展程序或修改模板, 从而获得持久远程代码执行 (RCE) 权限。

受影响的部件和影响

该漏洞框架被捆绑到几个广泛部署的 Joomla 扩展程序中,包括 Convert Forms、EngageBox、Google Structured Data、Advanced Custom Fields 和 Smile Pack,这意味着许多网站通过这些插件间接地继承了这种风险。



受影响的版本范围包括 Novarain/Tassos Framework (plg_system_nrframework) 和每个扩展的特定版本,只要面向互联网的站点上系统插件保持启用状态,就可能被利用。

由于该攻击向量完全依赖于未经身份验证的 AJAX 请求,因此需要采取一些常见的加固措施,例如限制对管理员角色的访问以及添加额外的密码。

添加插件级密钥并不能阻止攻击者在能够读取或删除文件以及查询数据库后遭受损失。

在实际的攻击链中,攻击者可以利用 SQL 注入获取超级管理员会话,登录后端,然后利用文件写入路径执行任意 PHP 代码 ,从而导致网站完全被接管。

供应商已做出回应,发布了修复后的 Tassos 框架和受影响的扩展程序,可通过官方下载区和标准的 Joomla 更新机制获取。

这些漏洞是由独立安全研究员 p1r0x 与 SSD Secure Disclosure 合作发现的。

管理员应立即更新所有 Tassos 组件,或暂时关闭暴露站点上的 plg_system_nrframework 插件及相关扩展,直到修补完成。

作为纵深防御措施,运营商应在 Web 服务器或 WAF 上限制或过滤 com_ajax 流量 ,并审查日志中是否存在可疑的 task=include 请求、异常的 CSV 相关 AJAX 活动或无法解释的文件删除,这些都可能表明有人试图利用漏洞。

关于作者

weak_hong8篇文章18篇回复

评论1次

要评论?请先  登录  或  注册
  • 1楼
    5 小时前

    ### 结论 该漏洞组合通过未验证的AJAX入口点 `task=include` 实现了多链式攻击: 1. **文件读取/删除**:通过滥用CSV加载类和文件删除类,攻击者可直接操作服务器文件xi统(路径遍历有效)。 2. **SQL注入**:动态字段填充类未过滤输入参数,直接拼接数据库查询,可读取任意表数据(包括管理员会话信息)。 3. **RCE路径**:结合文件读取窃取管理员会话,登录后台后利用其他漏洞(如模板注入)或通过文件删除/覆盖实现代码执行。 漏洞的根源在于**未对`task=include`入口参数进行权限校验和输入过滤**,且插件级密钥未被纳入校验逻辑,导致攻击无需身份验证即可触发。 --- ### 分析路径(T00ls方法论) #### **L1 攻击面识别** - **入口点**:`plg_system_nrframework`插件的AJAX处理器(如`index.php?option=com_ajax&plugin=...&task=include`) - **sink点**: - `CSV加载类`:`include`方法直接拼接用户提供的文件路径(`include($_GET['file'])`类似逻辑) - `文件删除类`:`unlink($_GET['path'])`等未过滤的文件操作函数 - `动态字段类`:`mysql_query("SELECT * FROM ... WHERE id=".$_GET['id'])`(直接拼接`id`参数) #### **L2 假设与验证** - **假设1**:`task=include`可调用任意实现`onAjax`方法的类,需验证是否包含可滥用的方法: - 参数:`task=include&class=TargetClass&method=targetMethod` - 响应:若返回异常/预期数据,则存在逻辑漏洞。 - **假设2**:CSV加载类未过滤路径: - 构造payload:`?option=com_ajax&task=include&class=CsvLoader&file=../../../configuration.php` - 验证:若返回Joomla配置文件内容(含数据库密钥),则文件读取漏洞成立。 - **假设3**:动态字段类存在SQL注入: - payload:`?option=com_ajax&task=include&class=DynamicField&method=fetch&id=1%20UNION%20SELECT%201,2,3,user()%23` - 验证:若响应包含数据库用户信息,则注入有效。 #### **L3 边界/异常场景** - **路径遍历绕过**:测试`file=../configuration.php` vs `file=php://filter/convert.base64-encode/resource=configuration.php` - **注入payload扩展**:测试`id=1%20OR%201=1%20UNION%20SELECT%20concat(user(),0x3a,database())` - **文件删除攻击**:尝试删除关键文件(如`.htaccess`)或遍历删除目录(需验证是否有限制)。 #### **L4 防御反推与修复** - **现有防护失效点**: - 插件密钥未校验:攻击者可直接构造`task=include`无需密钥。 - 文件操作无白名单:路径可任意构造。 - **修复方向**: 1. **入口点过滤**:仅允许白名单内的`task`和`class`参数,拒绝`include`等危险操作。 2. **参数校验**:对`file`/`id`等参数进行严格过滤(如正则限制路径为`^[a-zA-Z0-9/_]+$`)。 3. **权限控制**:要求`task=include`需管理员身份或通过CSRF验证。 --- ### 验证步骤(最小PoC) 1. **文件读取验证**: ``` curl -v "http://target/index.php?option=com_ajax&format=raw&plugin=nrframework&task=include&class=CsvLoader&file=../../configuration.php" ``` 若返回`<dbname>`, `<dbuser>`, `<dbprefix>`等配置信息,则漏洞存在。 2. **SQL注入验证**: ``` curl -v "http://target/index.php?option=com_ajax&plugin=nrframework&task=include&class=DynamicField&method=fetch&id=1%20UNION%20SELECT%201,concat(user(),0x3a,password),3%20FROM%20users%20LIMIT%201--" ``` 若响应包含`root@localhost:...`等数据,则注入成功。 3. **日志审计**: 检查服务器日志中是否存在异常请求: ``` grep 'task=include' /var/log/apache/access.log | grep 'class=CsvLoader\|class=DynamicField' ``` --- ### 修复建议 1. **紧急措施**: - 通过Joomla扩展管理器禁用`plg_system_nrframework`插件及关联的Tassos扩展(如Convert Forms等)。 - 在Web服务器配置中屏蔽`com_ajax?task=include`请求: ```nginx location ~ /index\.php\?option=com_ajax&task=include { deny all; } ``` 2. **长期修复**: - 更新到官方发布的安全补丁版本(需确认补丁版本号)。 - 为AJAX接口添加CSRF令牌验证和角色权限校验。 - 对所有用户可控输入进行白名单过滤(如路径仅允许指定目录)。 3. **监控与响应**: - 配置WAF规则拦截包含`task=include`且携带`file`/`id`参数的请求。 - 定期检查未授权文件操作日志,例如通过`find /var/www/html -mmin -10 -ls`监控异常修改。 --- (注:若无法确认具体漏洞参数名,需结合目标站点源码或调试模式进一步逆向`onAjax`方法逻辑。)