bash ゼロデイ脆弱性(だと思ってた)を知った後の心の機微
これは、ひょんなことから、bash ゼロデイ脆弱性(だと思ってた)を知ってしまった私の心の動揺に関する記録
これは、ひょんなことから、bash ゼロデイ脆弱性(だと思ってた)を知ってしまった私の心の動揺に関する記録
長いです
- 2019/4/6 yamayaさんオーパーツ投下
- 2019/4/6 ぐれさんの解読
- 2019/4/12 脆弱性(だと思ってた)発覚
- 2019/4/14 技術書典6
- 2019/9/2 ご回答があった
- その後
2019/4/6 yamayaさんオーパーツ投下¶
yamaya(@yamaya)さんが驚愕のオーパーツを投下する。これは、現在の人類では生み出せない未知のテクノロジーが詰まっていた。
ワイ「読めないすごいwww」ということだけは瞬時にわかり、これは解読するには本腰を入れないといけないと腹を括り、自分のあとで解読するメモに追加した。
この時は2019/4/14に開催される技術書典6に関わる準備などで忙殺されており、すぐ解読したいのをこらえた(この時は体が4~5体必要だと思っていた)
なぜかフィボナッチ数列が出力される¶
1
— シェル芸bot (@minyoruminyon) 2019年4月6日
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597
2584
4181
6765
10946
17711
28657
46368
75025
121393
196418
317811
514229
832040
1346269
2178309
3524578
5702887
9227465
14930352
24157817
39088169
63245986
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903 https://t.co/8Rj5NtWE4W
なぜかシェルピンスキーのギャスケットが出力される¶
https://t.co/uict1Hg30k pic.twitter.com/g5ou4OweoE
— シェル芸bot (@minyoruminyon) 2019年4月7日
ちなみに私はシェル芸ピンスキーのギャスケットの方をまだ解読していない。
2019/4/6 ぐれさんの解読¶
ぐれさん(@grethlen)解読記事を公開。バスる。
とてもわかりやすく解説していらっしゃるので、興味のある方は是非。私もこれで構造については理解できた。
ここで未知のテクノロジーが紐解かれるが、この時、あんなことになるとは思いもしなかったのであった。。(フラグ)
yamayaさんの難読化シェル芸(フィボナッチ数列) 解説
https://gist.github.com/greymd/455a13bb6f757c5ccd00bfb155d525e2
このツイートの解説記事を雑に書きました。興味のある方は是非。#シェル芸#難読化シェル芸
— ぐれさん@技術書典6「こ06」 (@grethlen) 2019年4月8日
yamayaさんの難読化シェル芸(フィボナッチ数列) 解説https://t.co/cK9zHi7Iaw
このフィボナッチ数列を出す暗号文のようなシェル芸、なんとかやってること完全に理解したんだけど、単に読みづらくしているというレベルではなかった。
— ぐれさん@技術書典6「こ06」 (@grethlen) 2019年4月7日
少なくともbashのundocumentedな挙動を3つくらい利用してて、読み解きながら背筋がゾッとした。https://t.co/wfC1wsFZqN
解説記事が深イイすぎて脳が死んだwww #シェル芸
— kanata@技術書典6 こ21 (@kanata201612) 2019年4月8日
理解したけど……わからん…これを…人類が作ったとは…到底思えない…
この境地に辿り着けるイメージが全くわかない…(驚嘆) https://t.co/nKOfWxbVPz
これは本当に心からそう思っており、仮に私が自由な時間を10年ぐらい貰ったとしても、同じものを作れる気がしない。この境地に辿り着けるイメージが全くわかない(驚嘆)
2019/4/12 脆弱性(だと思ってた)発覚¶
ぐれさんから、yamayaさんがbashの脆弱性を見つけたので、例のオーパーツには触れないよう(解説記事などを公開しなよう)とご連絡を頂く。
私は、後で解読すると公言していたので、気を使って連絡して頂いたようだ。
あのオーパーツに触れると脆弱性の秘密が発見されるリスクがあるというのだ(ΩΩΩ<な、なんだってー!? )
パンドラの箱に触れてはいけない…
この謎を解明するべく我々スタッフ一同はアマゾンの奥地へ飛ぶこともなく、
なるほど、了解しました。自重しますと冷静に返答することもできず、溢れ出る興奮を隠しきれずハイテンションで「うっほおおおおお自重しますwwwwwww」となってしまった。大丈夫かコイツという一抹の不安を与えてしまった事は否めない。
ここは強めに言っておきますが、普段「うんこうんこ」と言っているシェル芸人でも、こういうことはちゃんと守る。ちゃんと守りますうんこ。
あとすいません、不謹慎に興奮してしまいました。bashのメンテナさんはリスペクトしています。
ちなみに、POCは以下である。
POC¶
整数型を宣言してる変数に外部から文字列を食わせることで任意の算術式を実行させられるというもの。任意の算術式なので、もちろんコマンドも注入できる。
$ echo '_[$(whoami >&2)]' | bash -c 'declare -i x; read x'
これを最初に見た私の気持ちは「わからんわwwwwwwwww」であった。
どうしてこれで、コマンドが実行されるのかわからなすぎて笑った。あとやべーなやっぱり。バックエンドでbash動いているシステムはけっこう危険。
脆弱性に名前つかないかな¶
このあと、興奮冷めやらず、CVE番号振られるだろうな~、あ、Shellshockみたいに名前つかないかな~。UNKOにならないかな~
UNdocument Killing Obfuscated ──UNKO
こんな感じだな、よし満足したwとやっていた。頭おかしい。
セキュリティ好きなので、自らの手でCVE番号を取得するのが夢だったりします。
2019/4/14 技術書典6¶
とまぁ、この脆弱性の連絡を頂いたのが技術書典6のなんと2日前である。こういう大イベントは意外と重なりがち。
技術書典はもぅ頒布する側としての参加は初めてでもあったので、すごく楽しかった。
と、同時にbashのゼロデイ脆弱性(だと思ってた)を知っているという甘美な秘密(すいません)を抱えながら参加することになった。いい経験だった。
脆弱性が家にあると、ちょっと嫌なことがあっても「まあ家に帰れば脆弱性あるしな」ってなるし仕事でむかつく人に会っても「そんな口きいていいのか?私は自宅で脆弱性とよろしくやってる身だぞ」ってなれる。戦闘力を求められる現代社会において脆弱性と同棲することは有効
ただし、この脆弱性について私は1ミリも貢献していない。
あ、よかったらポチっとお願いします。
2019/9/2 ご回答があった¶
yamayaさんが、以下を投稿される。大変にわかり味がある。
どさにっき¶
使ってる人がいちばん多いだろうからタイトルでは bash としてるけど、ここで取り上げることは zsh および ksh 一族(本家 ksh、pdksh、mksh)にも該当する。ash、dash などでは該当しない。...
結論は、yamayaさんの投稿から引用させて頂くと、以下であった。
「スクリプトを書く人が対処すべき問題であってシェルそのものの問題ではない」との回答
私個人としては、bashに対して恨みはないどころか毎日使わせて頂いて本当にありがとうございます。
なので、仕様であれば仕様であると、とりあえず受け入れることにした。
ここらへん各言語に裁量があって、開発効率とのトレードオフになっていると理解している。
例えばPHPは注意してコーディングしないと脆弱性を生みやすい(偏見かも)んだけど、PHPがなければWordPressは生まれなかったと開発者の方が述べている。
そして、いま書いているこの日記のようなものを公開するタイミングを考え出す。変に煽ってないだろうか、コードを1行追加するのだって簡単じゃない場合が沢山あるのを知っている。業務のバッチ処理に影響がでるかもしれない、と、若干気を揉んで、しかし最大のリスクは、この挙動を知らないままでいることだと思い、早々に公開することを決めた。(ままま、この記事どれだけの人が見るんだというのはあるけれど)
あと、ぐれさん解説してくれるかもしれないので、これも期待
Comments