LoginSignup
0
0

More than 5 years have passed since last update.

CVE-2018-1133を使ってMoodleサイトを攻撃してみる(W.I.P.)

Posted at

概要

Moodle 3.4.2以前の幅広いバージョンである脆弱性が確認された。
"Evil Teacher: Code Injection in Moodle"という報告者のブログエントリによると、小テストの計算問題を利用して任意コード実行の攻撃ができることになる。"Evil Teacher"となっているのは小テストの編集が必要なため。

question/type/calculated の問題について

同モジュールにはMoodle 2.xの頃にも任意コード実行の脆弱性が確認されている。

脆弱性についての調査

前掲のブログエントリを確認してみると、qtype_calculated_find_formula_errors() の中で行っているバリデーションが不適切なため、後で行う eval() で任意コード実行を許しているとなっている。

eval() の前には入力された $formula に対して以下のバリデーションが行われる。

  1. while (preg_match('~\\{[[:alpha:]][^>} <{"\']*\\}~', $formula, $regs)) { $formula = str_replace($regs[0], '1', $formula); } で $formula の中にあるブレースで囲まれた英字(計算問題中の変数部分)を1に置換する。
  2. $formula の文字列中にある空白を取り除き、英字を小文字に置き換える。
  3. max, log, abs などの利用許可されている関数についての取り扱いを行う。
  4. preg_match("~[^[-+/*%>:^\~<?=&|!.0-9eE]+~", $formula, $regs) にヒットする不正な文字が含まれていないかチェック。

このバリデーションで問題ないと判断されれば eval('$str = '.$formula.';') が実行される。上記のうちで1と2を通過できる攻撃コードを考える必要がある。
少し検討してみたが思ったようなコードが通らず検討中。

おまけ

ブログエントリ中にYouTubeの動画があり、そこでこの脆弱性への攻撃方法を紹介している。その中では $formula に {dGhpcy1pcy1hbi1leHBsb2l0LXByZXZlbnRpb24KdGhpcy1pcy1hbi1leHBsb2l0LXByZXZlbnRpb24K} と入力しているが、どう見てもevalして有効なPHPコードになるようには見えない。
BASE64エンコードしてあるっぽいのでデコードしてみると

$ echo dGhpcy1pcy1hbi1leHBsb2l0LXByZXZlbnRpb24KdGhpcy1pcy1hbi1leHBsb2l0LXByZXZlbnRpb24K | base64 -d
this-is-an-exploit-prevention
this-is-an-exploit-prevention

oh...

0
0
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
0
0