以下の内容はhttps://cysec148.hatenablog.com/entry/2025/08/24/155525より取得しました。


第42回:RCE(リモートコード実行)脆弱性の発見と再現

Hello there, ('ω')ノ

💣 RCEとは?

RCE(Remote Code Execution)とは、 攻撃者がリモート(遠隔)からコードを送り込み、対象のアプリやシステム上で任意のコードを実行させる攻撃です。

RCEが成立すると、次のようなことが可能になります:

  • 端末内のファイルを読み書き
  • カメラやマイクを起動
  • 他アプリへの攻撃中継(踏み台化)
  • 任意のプログラムをダウンロードして実行

⚠️ RCEにありがちな原因

原因 説明
外部入力を直接コードとして実行 eval()exec() にユーザーの入力が使われている
スクリプト機能の誤用 JavaScriptやWebViewの連携機能で外部コードが通ってしまう
デバッグ機能の残存 本番でも使える“隠し機能”が悪用される
動的コード読み込み(DexClassLoader) 外部からダウンロードした .dex ファイルをそのまま実行している

🧪 RCEの診断ポイント

✅ 1. コードの中で Runtime.exec()ScriptEngine を探す

MobSF や jadx を使って、以下のようなコードをチェック:

Runtime.getRuntime().exec(userInput);
ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino");
engine.eval(userInput);

→ ユーザー入力がコマンドやスクリプトとしてそのまま評価される場合、RCEのリスク大です。


✅ 2. WebView × JavaScriptインターフェースの誤用

webView.addJavascriptInterface(new JsBridge(), "Android");

この設定を使っていて、かつ setJavaScriptEnabled(true) になっていると、悪意あるHTMLからJavaのコードが実行される危険性があります。


✅ 3. 外部Dexファイルの読み込み

DexClassLoader dcl = new DexClassLoader(pathToDex, ..., null, classLoader);
Class<?> clazz = dcl.loadClass("com.evil.Backdoor");

攻撃者が用意した .dex ファイルをダウンロードして実行できてしまう設計だと、まさにリモートコード実行が成立してしまいます。


🧪 実際に再現するには?

※以下は検証端末・自己所有アプリのみで実行してください。

✅ 再現例①:コマンド実行

String cmd = userInput; // "ls /data/data/"
Runtime.getRuntime().exec(cmd);

→ このようなコードに "cat /proc/version" などを入れると、システム情報の取得が可能になります。

✅ 再現例②:JavaScript経由でコード実行(WebView)

  1. HTMLファイルを用意:
<script>
    Android.run("Runtime.getRuntime().exec('ls')");
</script>
  1. WebViewで読み込むと、Android側で Javaコードが実行される可能性があります(設定による)。

🛡️ 対策方法

対策 内容
入力値の検証(バリデーション) ユーザーからの入力を直接コードとして使わない
動的コード評価の禁止 eval()exec() の使用は極力避ける
JavaScript連携の制限 WebViewで addJavascriptInterface() を使う場合、対象や機能を最小限に
Dexファイル読み込みの制御 ダウンロードしたファイルの署名確認やハッシュ検証を必ず行う
デバッグ機能の削除 開発用のバックドア・隠し機能は本番では必ず削除する

🧠 実例:RCEによって起きた事故

  • チャットアプリのデバッグメニュー経由で任意コマンドが実行され、全ユーザーの端末がマルウェア化
  • JavaScriptと連携していたWebViewが、外部サイトから任意の処理を許してしまった
  • 一時的なテスト目的で入れていた「eval」呼び出しが、コードインジェクションを許していた

✅ まとめ

  • RCE(リモートコード実行)は、攻撃者が外部から任意のコードを実行できてしまう最も深刻な脆弱性
  • Runtime.exec()eval()、WebViewの連携機能など、動的なコード評価機能が狙われる
  • 診断では、ユーザー入力と実行系APIがどこで繋がっているかを中心に調査
  • 入力値の制御、評価機能の制限、実行ファイルの検証など、多層的な対策が必須!

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/08/24/155525より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14