2025年8月20日 星期三

[研究]滲透測試發現 java.lang.StringIndexOutOfBoundsException 的風險等級

[研究]滲透測試發現 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. 建議處理方式

  1. 確認 Response:確定是否在 Response body、header,還是某個 debug hidden field。
  2. 關閉詳細 exception 傳遞:
    • Java Web.xml 設定 <error-page> 搭配 web.xml 或 Spring Boot 的 server.error.include-message=never。
    • 確保錯誤細節只寫入 server log,不要透過 Response 帶給 Client。
  1. 再測一次:確保 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 訊息。

(完)

沒有留言:

張貼留言