[研究]滲透測試發現 java.lang.StringIndexOutOfBoundsException 的風險等級
2025-08-20
Java 網站做滲透測試,有設定客製化錯誤網頁,滲透測試檢測人員用 burp Suite 攔到 java.lang.StringIndexOutOfBoundsException 訊息,但是訊息並沒在使用者畫面顯示,檢測人員 可以因 burp Suite 攔到 Exception 訊息,判斷為 Critical, High, Medium, Low, Info 安全問題,或應是 無安全問題 ?
ChatGPT 說:
這是一個 「誤判風險」很高的情境,我幫你分幾個層次拆解:
1. 目前情況描述
- 你的 Java 網站有 客製化錯誤頁(使用者實際畫面看不到詳細 Exception 報錯)。
- 滲透測試人員用 Burp Suite 攔截 HTTP Response,在 Response 內容裡仍看到 java.lang.StringIndexOutOfBoundsException 之類訊息。
- 表面上:使用者端看不到,但 HTTP Response 裡的 Raw Data 仍帶有 Exception 訊息。
2. 風險判斷依據
| 狀況 | 安全性風險判斷 | 常見等級 |
| Exception 訊息會顯示在使用者畫面 | 攻擊者可直接收集系統細節 (stack trace、class name、程式路徑),可能導致資訊洩漏 | Medium / High (依 Exception 敏感度) |
| Exception 不顯示在畫面,但仍出現在 Response 原始碼/HTTP Header/隱藏區段 | 攻擊者可攔截流量就能取得錯誤細節 → 屬於 資訊洩漏 (Information Disclosure) | Low / Medium |
| Exception 完全不回傳到用戶端 (只留在 server log) | 攻擊者完全無法取得 → 無資訊外洩 | 無安全問題 |
狀況 安全性風險判斷 常見等級
Exception 訊息會顯示在使用者畫面 攻擊者可直接收集系統細節 (stack trace、class name、程式路徑),可能導致資訊洩漏 Medium / High (依 Exception 敏感度)
Exception 不顯示在畫面,但仍出現在 Response 原始碼/HTTP Header/隱藏區段 攻擊者可攔截流量就能取得錯誤細節 → 屬於 資訊洩漏 (Information Disclosure) Low / Medium
Exception 完全不回傳到用戶端 (只留在 server log) 攻擊者完全無法取得 → 無資訊外洩 無安全問題
3. 你這個案例
- 客製化錯誤頁已啟用 ✅
- 但 Burp Suite 仍攔到 Exception 訊息 → 代表 後端實際 Response 仍有資訊洩漏,只是 UI 上被包裝。
- 意味著只要有人攔封包(MITM、自身測試、Proxy),還是能取得 Exception 細節。
這就屬於 資訊洩漏漏洞,一般安全測試會歸類為:
- 👉 Low (若只是類似 StringIndexOutOfBoundsException 這種常見錯誤,無敏感內部資訊)。
- 👉 Medium (若 Exception 包含明確路徑、SQL 語法、系統環境參數)。
絕對 不是 Critical / High,因為沒有直接 Remote Code Execution、SQL Injection、認證繞過等。
也 不是無安全問題,因為錯誤資訊仍然外洩到 Response。
4. 建議處理方式
- 確認 Response:確定是否在 Response body、header,還是某個 debug hidden field。
- 關閉詳細 exception 傳遞:
- Java Web.xml 設定 <error-page> 搭配 web.xml 或 Spring Boot 的 server.error.include-message=never。
- 確保錯誤細節只寫入 server log,不要透過 Response 帶給 Client。
- 再測一次:確保 Burp Suite 攔到的 Response 不含 exception string。
✅ 結論:
你這個情況應該歸類為 Low ~ Medium 資訊洩漏漏洞 (Information Disclosure),不是 Critical/High,更不是「無安全問題」。
**********
以下是一份你可以給滲透測試單位或寫進資安報告的 回應範本,我用 正式中文 幫你寫:
回應範本:
議題名稱:java.lang.StringIndexOutOfBoundsException 錯誤訊息資訊外洩
檢測結果說明:
滲透測試人員於攔截 HTTP Response 時發現存在 java.lang.StringIndexOutOfBoundsException 錯誤訊息,然而該錯誤訊息並未於實際使用者瀏覽器畫面顯示,而是被客製化錯誤頁面所取代。此情況代表系統內部例外訊息仍可能透過 Response 回傳至 Client 端封包中,被攔截工具(如 Burp Suite)擷取。
風險等級建議:
本議題屬於 資訊洩漏 (Information Disclosure),主要風險為攻擊者可藉由封包攔截方式獲取部分系統內部錯誤細節。
- 若錯誤訊息僅包含通用例外名稱(例如:StringIndexOutOfBoundsException),未帶有敏感路徑或 SQL 內容,建議風險等級為 Low。
- 若訊息包含系統路徑、程式碼位置或資料庫相關資訊,建議提升至 Medium。
本案例未涉及敏感資料或直接攻擊面,故不屬於 High 或 Critical 等級。
改善建議:
- 避免例外訊息回傳至 Client
- 確認 Web Application Framework 設定,例如:
- Java EE: 使用 web.xml <error-page> 配置。
- Spring Boot: 設定 server.error.include-message=never、server.error.include-stacktrace=never。
- 僅顯示客製化錯誤訊息給使用者(如「系統發生錯誤,請稍後再試」)。
- 完整紀錄於伺服器 Log
- 將詳細 Exception Stack Trace 寫入伺服器端日誌,供開發與維運人員除錯使用。
- 重新測試驗證
- 修正後再次透過 Burp Suite 或類似攔截工具測試,確認 Response 已不再含有 Exception 訊息。
(完)
沒有留言:
張貼留言