
Google Pixelのマークアップツールで編集前の画像が復元できる脆弱性、エクスプロイトが公開 12
ストーリー by headless
復元 部門より
復元 部門より
Google は Pixel の「マークアップ」ツールで発見された脆弱性 (CVE-2023-21036) を 3 月のアップデートで修正したが、これを利用するエクスプロイト「aCropalypse」が公開されている
(エクスプロイト作者のブログ記事、
9to5Google の記事、
Android Police の記事、
Simon Aarons 氏のツイート)。
マークアップはスクリーンショット撮影時に表示され、画像のクロップや書き込み・塗りつぶし等を可能にする。CVE-2023-21036 では編集の結果を保存する際にファイルサイズを切り詰めずに新しい画像データを上書きするため、元のデータが一部残されてしまう。具体的な処理を知ることは難しいが、エクスプロイト作者の David Buchanan 氏は Android 10 以降で 2021 年に修正された ParcelFileDescriptor.parseMode のバグとみているようだ。
脆弱性が修正されても既に保存したファイルが更新されるわけではない。このような画像をソーシャルメディアアプリやメッセージングアプリなどで送信する場合、読み取れない元の画像データはメタデータとともに削除されるが、Discord では 1 月までこのような処理が行われていなかったという。そのため、それ以前にアップロードしたスクリーンショットでは、隠したつもりの部分が復元されてしまう可能性がある。
エクスプロイトの作者が過去に使用していた Pixel 3XL のスクリーンショットを Discord からダウンロードして復元処理を行ってみたところ、eBay の確認メールのスクリーンショットから自宅住所全体が復元されたそうだ。なお、復元処理はすべてローカルで行われるとのことだ。
マークアップはスクリーンショット撮影時に表示され、画像のクロップや書き込み・塗りつぶし等を可能にする。CVE-2023-21036 では編集の結果を保存する際にファイルサイズを切り詰めずに新しい画像データを上書きするため、元のデータが一部残されてしまう。具体的な処理を知ることは難しいが、エクスプロイト作者の David Buchanan 氏は Android 10 以降で 2021 年に修正された ParcelFileDescriptor.parseMode のバグとみているようだ。
脆弱性が修正されても既に保存したファイルが更新されるわけではない。このような画像をソーシャルメディアアプリやメッセージングアプリなどで送信する場合、読み取れない元の画像データはメタデータとともに削除されるが、Discord では 1 月までこのような処理が行われていなかったという。そのため、それ以前にアップロードしたスクリーンショットでは、隠したつもりの部分が復元されてしまう可能性がある。
エクスプロイトの作者が過去に使用していた Pixel 3XL のスクリーンショットを Discord からダウンロードして復元処理を行ってみたところ、eBay の確認メールのスクリーンショットから自宅住所全体が復元されたそうだ。なお、復元処理はすべてローカルで行われるとのことだ。
いつぞや話題になった黒塗りPDFと同じか (スコア:3, 興味深い)
見えなくなったからって情報が無くなったわけではないと言うあれ?
Re:いつぞや話題になった黒塗りPDFと同じか (スコア:1)
だよねー
https://bunshun.jp/articles/-/7742?page=1 [bunshun.jp]
PNGって画像ファイル内のどこを表示するか指定できるんですかね。
確かピクセルのすクラーンショット関連ツールはPNG形式で画像を作るはず。
Re: (スコア:0)
そういうんじゃなくて、ファイルサイズが小さくなるときにtruncateを忘れていて元のファイルの末尾部分がゴミとしてトリミングしたファイルの末尾にそのまま残ってしまうという問題。
一般には先頭部分が失われたzlibストリームを復元することはできないけど、16KBごとに動的ハフマン辞書が初期化される性質とか新しいファイルに含まれる切り抜き部分を既知平文として使うことで復元が可能になるらしい
俺もDiscordにpng形式のスクショをアップして試したけど (スコア:0)
復元できなかったけどなんでだろう
元のファイルだと復元できたけどよくわからない
Re:俺もDiscordにpng形式のスクショをアップして試したけど (スコア:1)
> Discord では 1 月までこのような処理が行われていなかったという
今は削除されてるってことじゃね?
Re: (スコア:0)
興奮のあまり読み飛ばしてた
ごめん
やるやる (スコア:0)
ファイルそのままで先頭から書き込んじゃう奴ね。やるやる。
トリミングしたつもりが途中から普通に見れてしまうのは確かに問題。
しかしウェブサービスも画像を受け取るならきちんとデータのトリミング?みたいな地味に面倒そうな処理をしないといけないのね。
メタデータ削除のついでにやるようなものだし、そういうことしないと画像ファイルサーバーのつもりがデータ置き場に転用されかねないからセキュリティ対策を別としてもやらざるを得ないが。
でも軽く自作サービス作る時とかめんどくさそうだなぁ。ライブラリもツールもあるだろうけど。
Re:やるやる (スコア:1)
modeをwでfopenすべきところをr+で開いちゃってたみたいなことなのか
加工したファイルを元ファイルに上書き保存するってイメージがなくてすぐには分からなかった
Re:やるやる (スコア:2)
Android の ContentResolver の openOutputStream では、 mode に "w" を指定しても切り詰められないというのが始末に悪い。
前に自作アプリでひかかって調べたら、自分で truncate メソッドを呼ぶと良いというのを見つけて、まじかいなと思いながら対応した記憶がある。
今調べたら、 Android 10 から "w" では切り詰められない動作に変わっていて、 "wt" と指定すると 切り詰められるらしい……。
svn-init() {
svnadmin create .svnrepo
svn checkout file://$PWD/.svnrepo .
}
むしろ正々堂々と元ファイルに埋め込んでやれば良かったのに (スコア:0)
猫缶とか璃樹無とかうめ~このみかんとかFCさくらとかあややとかでんことかラブマとか
堂々と埋め込まずにコソコソ黒塗りするだけだからそういう目にあう
スマホ厨は軟弱だなぁ
ParcelFileDescriptor.parseMode のバグ (スコア:0)
記事に書かれているようにバグってるのはParcelFileDescriptor.parseMode。
バグの影響を受けるのがPixel の「マークアップ」ツール。
他にもParcelFileDescriptor.parseModeを使っているソフトウェアで作成した画像ファイルは同様の問題が存在する
っていう理解でよいのかな?