# Tugtainer 密码通过URL参数泄露漏洞
## 概述
Tugtainer 是一款用于自动化更新 Docker 容器的自托管应用。在 1.16.1 版本之前,其密码认证机制通过 URL 查询参数传输密码,存在安全风险。
## 影响版本
版本低于 1.16.1 的 Tugtainer。
## 细节
密码通过 URL 查询参数传递,而非 HTTP 请求体。该设计导致密码可能被记录在服务器访问日志、浏览器历史记录、Referer 请求头以及代理服务器日志中。
## 影响
攻击者可通过访问上述日志或记录途径获取用户密码,导致认证信息泄露。
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Password Exposure via URL Query Parameter · Advisory · Quenary/tugtainer · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
### 关键漏洞信息
#### 漏洞类型
- **URL参数中的密码暴露**
#### 漏洞详情
- **描述**:
- 密码认证机制通过URL查询参数传输密码,而不是通过HTTP请求体传输。这导致密码被记录在服务器访问日志中,并可能通过浏览器历史、Referer头和代理日志暴露。
- **CVSS评分**: 8.1
- **受影响版本**: v1.16.0及所有更早版本
- **修复版本**: v1.16.1
#### 代码示例
- **后端代码** (backend/core/auth/auth_password_provider.py line 17):
```python
async def login(self, request: Request, response: Response):
password = request.query_params.get("password", "") # 密码从URL获取
```
- **前端代码**:
- frontend/src/app/features/auth-page/auth-page.ts line 127
- frontend/src/app/entities/auth/auth-api.service.ts lines 32-41
#### 漏洞利用过程
- **步骤1**: 设置密码(首次设置)
```bash
curl -X POST "http://localhost:9412/api/auth/set_password" \
-H "Content-Type: application/json" \
-d '{"password": "TestPassword123", "confirm_password": "TestPassword123"}'
```
- **步骤2**: 通过URL中的密码参数登录(漏洞所在)
```bash
curl -X POST "http://localhost:9412/api/auth/password/login?password=TestPassword123" \
-H "Content-Type: application/json"
```
- **步骤3**: 验证密码是否被记录
```bash
docker logs <container_name> 2>&1 | grep password
```
- **步骤4**: GET方法同样能工作(浏览器历史记录风险)
```bash
curl -X GET "http://localhost:9412/api/auth/password/login?password=TestPassword123"
```
#### 影响
1. 凭据泄露至服务器日志
2. 通过访问日志文件可能导致账户接管
3. 浏览器历史记录暴露风险
4. Referer头泄露至外部站点
标题: Merge commit from fork · Quenary/tugtainer@9d23bf4 · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息
- **漏洞类型**:信息泄露
- **修复措施**:密码在请求体中发送,而不是URL查询参数
- **具体改动**
- **Backend:** 修改了 `auth_password_provider.py` 文件,从查询参数获取密码改为从请求体中获取。
- **Frontend:** 修改了 `auth-page.ts` 文件,密码传递方式改为 JSON 格式。
这些改动是为了防止敏感信息(如密码)直接暴露在 URL 中,避免被截获或泄露。
暂无评论