#2891·taipy

未认证源代码和通过无限制的应用指令静态服务秘密披露

作者: geo-chen创建于 2026年7月5日更新于 2026年8月4日

什么问题?

https://GitHub.com/Avaiga/taipy/security/advisories/GHSA-jvfw-r45j-mxmx - 无答复:

页:1

Taipy默认的 HTTP 处理器在请求路径匹配文件名时为应用程序脚本目录中存在的任何文件服务. 没有拒绝扩展名或文件名列表 。 一个未经认证的远程攻击者可以通过简单地按名称要求获取应用程序的Python源文件(".py"),环境文件(".env"),配置文件,私钥,以及其它任何与应用程序脚本合用位置的文件. 唯一的保护机制 -- -- `.taipyignore ' 文件 -- -- 并非默认创建的,而且完全没有文件,因此几乎所有的生产部署都受到影响。

详细情况

QQFlaskServer. get default-handler' (taipy/gui/ servers/flask/ server.py,HEAD中的195-213行;4.0.3 server.py中的220-237行)中默认的路由处理器包含两个倒置的文件保存区块. 第一回回主要应用脚本目录:

2zz
如果(则
hasattr(  main , "  file ") (中文(简体) ).
和(a)
文件   path := str ()
os.path.normpath ((base path : = os.path.dirname ( main . file ) + os.path.sep) + 路径)
(中文(简体) ).
。开始使用( base  path)
和 os.path.isfile(文件 路径)
而非自定义。 is ignored(文件 路径)
:
返回出自 directory(base path, path)的发件人 

第二回回QQui. root dir'(标准部署中相同的目录):

如果(则
(file path::=str(os.path.normpath ((base path::::=自. gui. root dir + os.path.sep) + path)))))起起取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取
和 os.path.isfile(文件 路径)
而非自定义。 is ignored(文件 路径)
:
返回出自 directory(base path, path)的发件人 

其用意是允许app作者在其页面中引用本地CSS,图像,和数据文件而无需配置一个明确的路径映射. 然而,没有文件扩展名或名称过滤. 唯一的排除机制是.is ignored',它读取了.tapyignore' gitignore-format文件。 如果没有这样的文件(除使用“泰比创建”的SDM模板产生空的.taipyignore'外,所有情况下都存在默认), is ignored总是返回`虚假'。

由于Werkzeug在路径到达路由处理器之前使 ". " 序列正常化,因此无法通过URL通过路径。 然而,应用程序目录中存在的任何文件都可以被其文件名直接访问.

文件通常与 Taipy 应用程序脚本合用同一位置, 并被此行为所曝光 :

  • " app.py " / " main.py " -- -- 有数据库查询的应用程序源代码、嵌入源中的API密钥、业务逻辑
  • .env' -- -- 环境变量,包括DATABASE-URL'、SECRET-KEY'、AWS-ACESS-KEY-ID'、`API-TOKEN'等。
  • " config.py " / " setters.py " -- -- 有全权证书的额外配置
  • *.pem、`*.key' -- -- TLS证书和私钥
  • " 要求.txt " 、 " Pipfile " 、 " pyproject.toml " -- -- 依赖清单(供应链侦察有用) . . . . . . .