1.13 | XXE
🕵️ Phát hiện lỗ hổng XXE bằng phân tích mã tĩnh (Static Code Analysis)
🔍 1. Static Code Analysis là gì?
Phân tích mã tĩnh (Static Code Analysis) giúp tìm kiếm lỗ hổng bảo mật trong code mà không cần chạy ứng dụng. Công cụ phổ biến nhất để phân tích mã tĩnh là SonarQube.
⚡ 2. Phát hiện XXE bằng SonarQube
Khi qu ét mã nguồn WebGoat, SonarQube sẽ phát hiện các vấn đề bảo mật, bao gồm lỗ hổng XXE (XML External Entity).
👀 Cách thực hiện quét với SonarQube:
1️⃣ Cài đặt SonarQube (nếu chưa có):
- Chạy SonarQube Server (
docker run -d -p 9000:9000 sonarqube) - Cài SonarScanner (
brew install sonar-scannerhoặc tải từ SonarQube Scanner)
2️⃣ Chạy quét mã nguồn WebGoat:
sonar-scanner \
-Dsonar.projectKey=WebGoat \
-Dsonar.sources=./WebGoat \
-Dsonar.host.url=http://localhost:9000 \
-Dsonar.login=your_token
3️⃣ Xem báo cáo trên giao diện SonarQube
🎯 3. Xác định lỗ hổng XXE
- SonarQube báo lỗi XXE trong
Commentsclass - Xác minh lỗi: Đây có phải true positive hay false positive?
- Trong WebGoat, lỗi này cố tình được đưa vào để thực hành bảo mật, nên đây là true positive.
🔧 4. Cách khắc phục lỗ hổng XXE
SonarQube sẽ đề xuất cách sửa lỗi, thường là:
- Tắt DTD và External Entities trong XML parser
- Sử dụng thư viện an toàn
Ví dụ: Trong Java, sửa lỗi bằng cách:
XMLInputFactory xif = XMLInputFactory.newFactory();
xif.setProperty(XMLInputFactory.SUPPORT_DTD, false);
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
✅ 5. Kiểm tra lại sau khi sửa lỗi
Sau khi áp dụng bản vá, quét lại với SonarQube:
sonar-scanner
Nếu lỗi biến mất hoặc được đánh dấu mitigated, nghĩa là bạn đã sửa lỗi thành công! 🚀