Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
moodle-grades-gradeitems — Moodle 5.2.3 - 高 - リモート - IDOR - core_grades_get_gradeitems が非表示の成績項目を一覧表示する | Kitploit
ツール/GitHubGitHub/abraxas/moodle-grades-gradeitems
脆弱性分析ウェブアプリケーション悪用APIセキュリティテスト情報収集ウェブセキュリティペネトレーションテスト学習と教育ラボと実践
GitHubabraxas/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle 5.2.3 - 高 - リモート - IDOR - core_grades_get_gradeitems が非表示の成績項目を一覧表示する

リポジトリを見る
279日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Abraxas Labs - moodle-grades-gradeitems

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  moodle-grades-gradeitems

解説記事: https://abraxaslabs.tech/research/moodle-grades-gradeitems

moodle-grades-gradeitems

Moodle LMS 5.2.3 - Moodle

分類: IDOR 到達範囲: リモート

core_grades_get_gradeitems は ajax および公式モバイルサービスであり、services.php に capabilities キーが存在しない。validate_context が唯一のゲートである。その後 grade_item::fetch_all がコース内のすべての項目をダンプする。array_filter は GRADE_TYPE_NONE、カテゴリ項目、コース項目を除外する。非表示はそのフィルタに含まれていない。兄弟メソッドである core_grades_get_grade_tree はすでに moodle/grade:viewall を要求している。

登録済みの学生が {courseid} を POST すると、学生の成績表 UI では依然として非表示になっている非表示成績項目の名前を取得できる。

IDCVE 未割当
CWECWE-862 / CWE-200
CVSSMedium: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
製品Moodle
影響を受けるバージョン5.2.3 タグ v5.2.3 (344232c15336c71b80f9aca8359ce0e0a9f3d116)
認証登録済みの学生 (moodle/grade:view を保持。viewall / viewhidden は保持しない)
ライセンスGNU Affero GPL v3.0
ラボ127.0.0.1 のみ

攻撃者ができること

攻撃者: コースに登録済みの学生。{courseid} を付けて AJAX サービスに POST する。レスポンスは名前、ID、カテゴリである。戻り値のスキーマにスコアは含まれない。RCE ではない。LPE ではない。スコアの書き込みでもない。

権限メソッド / シンク偵察 / 完全性 / 可用性ラボ実証または推測
非表示成績項目の名前、ID、カテゴリを読み取るPOST /lib/ajax/service.php?sesskey= core_grades_get_gradeitems {courseid}偵察ラボ実証済み。HTTP 200、名前に MOODLE-GRADES-GRADEITEMS-WITNESS を含む
表示成績項目の名前、ID、カテゴリを読み取る同一レスポンス偵察 (本来は教師向け)ラボ実証済み。名前に Visible Lab Assignment を含む
公式モバイルサービス経由で同じカタログを取得同一クラス、services に MOODLE_OFFICIAL_MOBILE_SERVICE を含む偵察services.php からの推測。ラボでは AJAX を使用
学生が入れるコースについて連番の courseid 値を走査する同一メソッド、ID を推測偵察推測。ラボではシード済みコース ID 2 を使用
学生の成績表 UI で非表示項目を確認するGET /grade/report/user/index.php?id=該当なしラボ実証済み クローズ。hidden-in-ui=False、visible-in-ui=True
セッションなしで呼び出すダミーの sesskey を使った AJAX該当なしラボ実証済み クローズ。servicerequireslogin
登録されていないログイン済みユーザーとして呼び出す外部者の AJAX、同一 courseid該当なしラボ実証済み クローズ。requireloginerror
他の学生のスコアを読み取る、または成績を書き込む該当なし該当なしクローズ。戻り値のキーは id、itemname、category
PHP RCE / OS LPE該当なし該当なしクローズ。この残存問題はカタログの読み取りである

すでに moodle/grade:viewall を持つ教師や管理者は、すでにカタログを閲覧できる。ゲスト / 未認証の呼び出し元は依然としてコースコンテキストを必要とする。

同じピンからの残り物: Blackboard img file read、enrol_database SQLi、grades feedback IDOR。

発見の経緯

MSA-26-0042/0043 の後、moodle/moodle v5.2.3 をピン留めした。成績ウェブサービスはその MSA の対象範囲に含まれていた。get_gradeitems.php には依然として require_capability が存在しない。学生向け UI ではすでに項目が非表示になっていたが、AJAX カタログではそうなっていなかった。

すでに記録済みの回り道: 未認証の AJAX 200 をリークとみなすこと(本文は servicerequireslogin)、メソッド名に grade が含まれるという理由でこれをスコア IDOR と呼ぶこと(スキーマは名前のみ)、get_grade_tree が同じ残り物だと期待すること(すでに viewall を要求している)。リバースシェル。茶番だ。

ラボ

php:8.3-apache + MariaDB 11.4 上で動作するライブ Moodle v5.2.3。シードは labstudent を登録し、laboutsider をコース外に残し、可視の手動項目と、その名前が証人となる非表示項目を作成する。run.sh はローカルのピンをコピーするか、git clone --depth 1 --branch v5.2.3 を実行する。Moodle のツリーはこのパックには含まれていない。

python3 moodle-grades-gradeitems-Abraxas-Labs.py

または

cd lab
./run.sh

対象は http://127.0.0.1:19590 のみです。プロジェクト moodle-grades-gradeitems を構成します。実行後、スタックは破棄されます。

SUCCESS moodle-grades-gradeitems student-ajax=200 hidden-in-ajax=yes hidden-in-ui=no visible-in-ajax=yes visible-in-ui=yes outsider-error=yes unauth-error=yes MOODLE-GRADES-GRADEITEMS-WITNESS

修正

validate_context の後で、get_grade_tree と同じケーパビリティ制限を要求する: require_capability('moodle/grade:viewall', $context)。さらに、呼び出し元が moodle/grade:viewhidden を持っていない限り、非表示項目を除外する。Behat/PHPUnit のテストケースを追加する: 受講登録済みの学生、非表示の手動項目、core_grades_get_gradeitems はその項目を省略する(または 403)必要がある。学生の成績表 UI ではすでに非表示になっている。

参考資料

  • github.com/moodle/moodle タグ v5.2.3
  • get_gradeitems.php
  • 兄弟関数はすでにケーパビリティを要求している: get_grade_tree.php
  • サービス登録: services.php(core_grades_get_gradeitems、capabilities なし)
  • 同じピン: moodle-blackboard-img · moodle-enrol-database-sqli · moodle-grades-feedback-idor
  • CWE-862

ライセンス

GNU Affero GPL v3.0。LICENSE を参照。ループバックラボ専用。保証なし。

ツールをダウンロード