关联漏洞
标题:
Apache SkyWalking SQL注入漏洞
(CVE-2020-9483)
描述:Apache SkyWalking是美国阿帕奇软件(Apache Software)基金会的一款主要用于微服务、云原生和基于容器等环境的应用程序性能监视器。 Apache SkyWalking 6.0.0版本至6.6.0版本和7.0.0版本中的H2/MySQL/TiDB存储实现存在SQL注入漏洞。攻击者可利用该漏洞访问数据。
介绍
# CVE-2020-9483---Apache-Skywalking-8.3.0
Thông tin tóm tắt về CVE-2020-9483
• CVE ID: CVE-2020-9483
• Mức độ: High
• Ảnh hưởng: Apache SkyWalking từ bản 6.x đến 8.3.0 (cụ thể khi dùng H2 database)
• Mô tả: Lỗ hổng SQL Injection tồn tại trong lớp H2QueryDAO, cho phép kẻ tấn công thực thi câu lệnh SQL tùy ý thông qua truy vấn từ phía người dùng được chèn trực tiếp vào truy vấn SQL mà không được escape hoặc parameterize.
Cơ chế hoạt động của SkyWalking:
• Agent thu thập log, trace, metrics từ ứng dụng
• Gửi về OAP (SkyWalking Core) qua HTTP
• OAP xử lý và lưu vào backend (H2, ElasticSearch…)
• Người dùng truy vấn dữ liệu qua Web UI hoặc API /graphql
GraphQL hỗ trợ cả truy vấn (query) và thao tác ghi (mutation). Tất cả các truy vấn và ghi dữ liệu đều đi qua endpoint /graphql (theo chuẩn GraphQL API).
Nhưng trong /graphql metricName là tham số đầu vào từ client (qua API /graphql hoặc Java call).
Không có kiểm tra/validate giá trị metricName.
metricName được gắn trực tiếp vào câu truy vấn SQL:

Cụ thể hơn trong SkyWalking
• API /graphql cho phép người dùng gửi truy vấn có chứa metricName
• OAP nhận truy vấn này, truyền thẳng metricName vào queryLogs(...)
• metricName được dùng trực tiếp trong sql.append(...) hoặc SelectQueryImpl.from(...)
• Khi backend là H2 (dễ bị thao túng truy vấn), attacker có thể chèn payload SQL vào
Cơ sở dữ liệu được Skywalking sử dụng trong cấu hình mặc định là h2 và được khởi động với quyền sa.


Cơ sở dữ liệu h2 có chức năng ghi tệp FILE_WRITE (yêu cầu quyền quản trị để thực thi) và cả nội dung tệp và tên tệp đều có thể được kiểm soát.


Một hàm LINK_SCHEMA khác có thể chỉ định và khởi tạo yêu cầu jdbc hoặc jndi, nhưng vì không có sự phụ thuộc vào tomcat và springboot trong môi trường đích nên không thể sử dụng jndi chung trong phiên bản jdk cao hơn và cần phải tìm chuỗi tham chiếu trong sự phụ thuộc cục bộ.


Kết luận về lỗ hổng CVE-2020-9483:
Nguyên nhân:
Ứng dụng nhận giá trị metricName từ phía người dùng (thông qua GraphQL API) nhưng không thực hiện kiểm tra hoặc lọc đầu vào trước khi sử dụng.
Truy vấn SQL được xây dựng bằng cách nối chuỗi trực tiếp (append(metricName)) thay vì sử dụng truy vấn có tham số (prepared statements), dẫn đến việc chèn mã SQL độc hại.
Hậu quả:
Khi sử dụng H2 database (mặc định trong SkyWalking 8.3.0), cơ chế thực thi SQL của H2 cho phép chạy nhiều câu lệnh, dẫn đến khả năng thực thi câu lệnh SQL tùy ý (SQL Injection), phá hủy hoặc truy xuất dữ liệu bất hợp pháp.
=> Kẻ tấn công có thể gửi truy vấn GraphQL chứa mã độc trong tham số metricName làm cho hệ thống thực thi câu lệnh SQL nguy hiểm trên cơ sở dữ liệu.
DEMO: https://drive.google.com/file/d/1eBvuMCrXEw2RjZpzHh01-9KJ2mooOFJj/view?usp=sharing
文件快照
[4.0K] /data/pocs/6c77dd770c4850289eba293c3f5b18cf955bf3c1
├── [ 955] code.class
├── [ 868] code.java
├── [ 247] hexcode.py
├── [ 246] hexrun.py
├── [4.0K] README.md
├── [1.3K] run.class
└── [ 715] run.java
0 directories, 7 files
备注
1. 建议优先通过来源进行访问。
2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。