2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Moodleで教師の権限昇格が可能な脆弱性を確認してみる

Posted at

おことわり

脆弱性を試すときは必ず自分の管理する検証用のシステムで実行してください。

この脆弱性について

2020年7月12日にあったMoodle 3.9.1を始めとする全てのアップデートで修正された、「コース内で教師ロールを持つユーザが、本来の権限を超えたロール割り当てが可能」な脆弱性。つまり、この脆弱性の影響を受けるのは、悪意のあるユーザが教師としてコースに割り当てられている場合となる。

Moodleでは通常、教師ロールを持つユーザはコース内で学生や、編集権限のない教師(TA)を割り当てることが可能であっても、他のユーザに教師ロールを割り当てたり、教師ロールを剥奪することは出来ないようになっている。マネージャなどの、それ以上の権限についても同様である。
しかしながら、この権限チェックの不備の脆弱性を利用する事で、自分にマネージャ権限を割り当てることが可能となり、他の教師の権限を剥奪することも可能となる。とは言ってもシステム管理者には勝てないので、三日天下に終わるわけだが…

脆弱性を試してみる

脆弱性があるとして修正された部分から、ロール割り当てをAjaxで行うところだと分かる。適当なテスト用環境を作成し、教師1教師2を割り当ててみる。ここで教師1が悪意のあるユーザだとする。

image.png

教師1で目的のコースにアクセスし、ユーザを登録するモーダルウインドウを開いて、適当なユーザを学生として登録してみる。

image.png

このとき、ウェブブラウザの開発ツールでリクエストを確認すると、https://<MOODLE.YOURDOMAIN>/enrol/manual/ajax.php?mform_showmore_main=0&id=2&action=enrol&enrolid=1&sesskey=<SESSION_KEY>&_qf__enrol_manual_enrol_users_form=1&mform_showmore_id_main=0&userlist[]=3&roletoassign=5&duration=&startdate=4 のようなURIへのGETリクエストが確認できる。
ここで、userlist[]=3 が対象ユーザのID、roletoassign=5 がロールIDとなる。他のパラメータは説明省略。

このURIのうち、ユーザIDを自分のIDに、ロールIDを1に変更して、ウェブブラウザのアドレスバーに突っ込んでリクエストを送る。なぜかXMLHttpRequestで無くても問題ない。ウェブブラウザのリロード機能などでページを更新すると、マネージャ権限が付与されていることがわかる。マネージャ権限が割り当てられているので、邪魔な教師2をコースから消し去ることが可能になっている。

image.png

ログで確認

ログを確認すると、変更した履歴がちゃんと残っている。

image.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?