Entr'ouvert Lasso g_assert_not_reached拒绝服务漏洞分析

本文详细分析了Entr'ouvert Lasso库中存在的g_assert_not_reached拒绝服务漏洞,攻击者可通过特制SAML断言响应触发该漏洞导致服务崩溃,影响版本包括2.5.1和2.8.2。

TALOS-2025-2196 || Cisco Talos情报组 - 全面威胁情报

漏洞概述

Entr’ouvert Lasso g_assert_not_reached拒绝服务漏洞存在于Entr’ouvert Lasso 2.5.1和2.8.2版本的g_assert_not_reached功能中。攻击者可以通过发送特制的SAML断言响应来触发拒绝服务。

确认受影响的版本

以下版本经过测试或由供应商确认存在漏洞:

  • Entr’ouvert Lasso 2.5.1
  • Entr’ouvert Lasso 2.8.2

产品链接

Lasso - https://lasso.entrouvert.org/

CVSSv3评分

7.5 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

CWE

CWE-617 - 可达断言

技术详情

Lasso SAML库是安全断言标记语言(SAML)标准的开源实现,主要用于在Web应用程序中启用单点登录(SSO)功能。它提供了SAML身份验证、处理断言、元数据解析以及服务提供商(SP)和身份提供商(IdP)交互的工具。

远程攻击者可以通过发送格式错误的SAML身份验证请求,在lasso SAML库的lasso_node_impl_init_from_xml函数中触发断言错误,从而导致服务崩溃。

这种情况发生在库启用g_assert_not_reached宏(默认功能)时。该缺陷的根本原因位于lasso/xml/xml.c的第1750行。

当发送的XML数据在解析时不被视为注释或XML_ELEMENT_NODE类型时,可以触发该宏。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
Line 1435    static int
Line 1436    lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode)
Line 1437    {
Line        (...)
Line 1646    } else if (t->type == XML_COMMENT_NODE || t->type == XML_PI_NODE || t->type == XML_TEXT_NODE) {
Line 1440        /* ignore comments */
Line 1441        continue;
Line 1646    } else if (t->type == XML_ELEMENT_NODE) {
Line 1647        LassoNode *subnode = NULL;
Line 1648        xmlNode *first_child = NULL;
Line 1649        GList **list = NULL;
Line 1650        xmlChar *content = NULL;
Line 1651        gboolean match = FALSE;
Line 1652        struct XmlSnippet *matched_snippet = NULL;
Line 1653    (...)
Line 1654    } else {
Line 1655        g_assert_not_reached();
Line 1656    }

时间线

  • 2025-05-13 - 首次联系供应商
  • 2025-05-14 - 向供应商披露
  • 2025-08-12 - 供应商发布补丁
  • 2025-11-05 - 公开披露

致谢

由Cisco高级安全倡议组的Keane O’Kelley和另一名成员发现

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计