【速報】Linuxに脆弱性 ディレクトリのパス名に1GB以上書くとroot権限を奪取できてしまう [323057825]
■ このスレッドは過去ログ倉庫に格納されています
Linuxカーネルにおいて、権限の昇格が生じる脆弱性「CVE-2021-33909」が明らかとなった。各ディストリビュータよりアップデートが展開されている。
バッファの割り当てが適切に行われておらず、域外への書き込みが可能となる脆弱性「CVE-2021-33909」が明らかとなったもの。Qualysが発見、報告した。
2014年7月以降に存在した脆弱性で、パス長が1Gバイト超のディレクトリ構造を作成し、マウント、削除を行うことで、root権限を取得することが可能だという。「Ubuntu」「Debian」「Fedora」など複数のディストリビューションで実際にroot権限を取得できることを確認したとしている。
同社は、6月9日に関係者のメーリングリストをホストするRed Hatに報告。調整を経て7月20日に脆弱性を公開した。
各ディストリビューションではアップデートなど対応を進めている。
Linuxカーネルにroot権限を取得できる脆弱性 - 1Gバイト超のパス長処理で
https://www.security-next.com/128357 windowsはNTFSの制限、ファイルエクスプローラーの制限、SMB/CIFSの制限と複数あって
ネットワークファイル名の最大長の制限がよくわからん >>2
256はむしろ少なすぎ
Java系のプロジェクトだと名前空間がファイル名になってて余裕でオーバーしやがる 意味が分からない誰か三行で説明しろ(´・ω・`)
Root権限取られても困るような動画持ってねえし >>9
Androidの方がやばいぞ(´・ω・`) linux kernel patch
diff --git a/fs/seq_file.c b/fs/seq_file.c
index b117b212ef288..4a2cda04d3e29 100644
--- a/fs/seq_file.c
+++ b/fs/seq_file.c
@@ -32,6 +32,9 @@ static void seq_set_overflow(struct seq_file *m)
static void *seq_buf_alloc(unsigned long size)
{
+ if (unlikely(size > MAX_RW_COUNT))
+ return NULL;
+
return kvmalloc(size, GFP_KERNEL_ACCOUNT);
} まあLinuxを基幹システムで採用してるような金融機関や官公庁なんて存在しないから問題ないな ファイル名の最大256字ですら多過ぎる
ファイル名やフルパスが長過ぎるのは設計自体悪い証拠なんだから適当に切ってしまえ >パス長が1Gバイト超のディレクトリ構造
なにそれこわい >>12
これで修正okなの?
kvmallocに1GB長のsizeを渡すとダメっぽいけど、kvmallocの方にサイズ長チェックを入れるのが正しいのでは? >>1
寿限無なんとかさんがアップをはじめました。 最大パス長に制限が無いところが利点の一つだったと思うが。。
最大パス長を1GBで制限かけたら、運用上支障が出るシステムが出てきそう。。 >>7
root権限なしにマウントする方法はいくつかあるけど、設定自体にroot権限が必要なのはそうかも ログインできるアカウント持ってないと、ディレクトリ作成もできないので、使わなくなったアカウントをこまめに消してれば、いいよね。 >>19
kvmallocに制限付けたらたったの1GBしかメモリ確保できなくてkvmallocを使う他の機能が動かなくなるやん $ uname -v
#1 SMP Debian 4.19.194-3 (2021-07-18)
https://security-tracker.debian.org/tracker/CVE-2021-33909
fixedだった >>7
仕様上mkdirでパスを無限に長くできて、途中でuint64がintに変換されててそこでなんかうまいことやるとroot権限を取得できるみたいな話だから当然root権限は要らない
たぶん >>32
大丈夫。ここの奴らもさも知ったふうな事言ってるけど懇切丁寧に説明できる様な奴はいないから。 >>34
Gは10億オーダー、最大8バイトと思えばミニマム1.25億文字ぐらい 3日くらい前にメイン機のubuntuぶっ壊れたのはこれのせいか ググると、最大パスは4096byteとも書かれているな。
4096byte=4kbyteじゃ小さすぎる気がするが。 昨日ミントに連続でアプデ来てたやつか?
古い機械でも動くから重宝してる >>7
mountするパスとかに応じて権限確認しに行くから
その段階で不具合踏むなら管理者権限いらんのでは >>22
1GBもあるパス名を使ってる時点で設計がヤバい パス名だけでその容量ってどんだけ長いか深いか
ひえーイメージ出来んな 皆の力でバルス
cd /
rm -rf *
今は出来ないんだっけ。 本体メモリを1G以下にすれば対応できないんじゃないの? >>38
半角英数字のパスだとしたら1文字1バイトで
1024(G)×1024(M)×1024(K)文字になるのかな?
どんなパスだよw なんか1000年生きた猫は猫又になるっていうレベルの話だな( ´・ω・`) >>2
せめて1Kできれば5Kくらいは欲しいな
ちょっとソース見たくてデスクトップにクローン持ってくる時たまに引っかかるわ キーボードで連打して入力しなくてもいいんだぜ
mdかmkdirだろ ディレクトリ名の最大値は255文字、ディレクトリの最大階層は255階層
とかに制限しとけよ
1GBの文字数とかアホかよ >>45
確かに、そんなに堀らないとは思うけど。。
制限かけてないシステムが微レ存。。 汎用機系のなんでも八文字ルールはなれれば美しいし不具合は起こらない そんな長さの階層はまず作らない
制限かけなくても、そこまで到達する
システムはないだろう
あるとすれば、悪意のある人がやる 人名も1GB制限しなきゃな
現行ではサイズ制限無いんだろ >>45
普通は使わないけど悪意を持った人がこういうパスを指定するとヤバイって話よね キーボードの上に突っ伏したまま寝てパスワード入力画面にとんでもない長さの文字列入力はよくやった
昔のUbuntuはそれやるとリセットか強制リブートしなきゃならなくなった >>74
プログラムだと簡単だ!
ループで文字列つくるだけ これはWindowsの勝利か?
Windowsはディレクトリを深く作ろうとしてもある程度までしか作れなかった。 一秒間に十六文字として、361.6898148148148日で約一年ぐらいか ls打ったら表示何時間掛かるんだろ、1GBのフルパス >>71
10俺のパスを作られる時点で既に乗っ取られてね?
って思ったけど、ソフトインストール時に作らせれば乗っ取れるって話か。
案外シャレにならんかもね。 vi で、1000000000i1 ってやって ESCキーを入力するんだ >>10
動画というか端末フォーマットされたら困らん?
OS再インストールから自分でできるならいいけど これってあれじゃね?
何ヵ月かまえの中国人がコードかなんかなんとかかんとかで
わすれちった。 >>84
その表のなかでNo limit defined[f]ってなってるのがだいたいLinuxで使われてるファイルシステムだよ 2014年からかよ。
オープンソースだからバグはすぐ見つかる論とは何だったのか。 Root権限無しにディレクトリ構造を作成し、マウント、削除を行うことは出来るのか? 中国のハッカーはこう言う脆弱性にはとっくの昔に気づいてるんだろうな
今の中国の発展ってこういう穴をついて先進国から盗んだ情報で成り立ってるのかもな 糞ほどマトリョーシカみたいにディレクトリ作って深くしまくるってことか 悪意ではなく実際に1GBのパス使ってる奴はいるのかな >>102
もはや自分のいる場所がわかんねーだろ…
深すぎて 1GBはデカすぎるけどクラッカーちゃんは穴みつけたら
そこを掘りこんでゆくからね。 パス名が1gb以上って意味がわからんかった
ようはくっそ長いパス名ってことか >>10
三行は無理だけど底辺プログラマの俺が頑張ってみた。
プログラムにはデータを入れる箱があります。
パス名を格納する為の1GB分の箱(path)と、ルート権限に関わる何らかのデータを格納する為の箱(root)が連続して用意されていたとします。
path箱にはプログラム外から渡されたデータが格納されます。
path箱のサイズは1GBしかない為、それを超えるデータが渡されてきた場合に備えて
・サイズが足らないよ!と怒って処理を終わる
・渡されたデータの内の1GBだけpath箱に格納して処理を継続する
などの対処を用意しておく必要があります。
これを怠った場合、1GBを超える部分のデータはpath箱の次の位置にあるroot箱の方に格納されてしまいます。
例えばroot箱が「ルート権限の人から起動されたら1という値を格納する」というもので、1GB部分の次の値が1であった場合、root箱はルート権限起動を示す状態になります。
プログラムがルート権限で動作するようになったことを足掛かりにシステム全体のルート権限を奪取することができたりします。
勿論、実際はこんな単純なものではありませんし色々なパターンがあります。 今日から出来る血液サラサラ習慣
・ウェイトトレーニング(血管内皮を丈夫にする、血管を広げる、動脈硬化予防)
・ランニング(医療用血栓溶解剤のt-PAと同じのが分泌される)
・納豆を食う(納豆キナーゼによる血栓溶解)
・ビタミンC、E、B(サラサラ効果)
・ビタミンD(サラサラ、抗ウイルス)
・ウコンサプリ(サラサラ、抗エンベロープウイルス)
・緑茶(サラサラ、抗エンベロープウイルス)
・キャベツなどのアブラナ科の野菜を食べる(硫化アリルによるサラサラ)
・玉ねぎをめっちゃ食う
・魚、魚油、アマニ油、エゴマ油をとる(オメガ3によるサラサラ)
血液をサラサラにして生活習慣病やコロナ重症化を予防しよう! >>3
バッファを上書きして、自分がどのユーザーかという情消す
そしてシスてユーザに戻るので、なんでもできる
バッファってなんなんや
調べてみるか LinuxってUnixのパクリなんでしょ
こんなの貧乏人以外に使ってるやついるのか これ住宅に例えるとどんなセキュリティ不備なの?
256文字以上の長い住所だと、店とかから記入不備と見做されて勝手に修正されるみたいな? >>119
1GBは何byteか聞いてるようなもんやんけ
調べろや 1GBって
現実的なとこで妥協しとこうや(´・ω・`) えっ、テキストで?
5ちゃんのスレ2000スレ分くらい? >>118
なんで住宅に例えるのかはさておき
自分の土地の権利書に寿限無書き込んでたら名前欄はみ出して隣の家の権利書まで上書きされて隣のうちも入り放題
なんなら隣のうちが市長で市長権限でなんでもやりたい放題無法地帯 >>19
ここで制限かけてるから1Gだったらはじかれるやろ
+ if (unlikely(size > MAX_RW_COUNT))
+ return NULL;
+ ディレクトリの日付バグるのはなんでや?
2028年とかなるぞ Windowsの256文字だとタイトルとかから自動生成する系でたまに超えるから倍くらいにしてほしい 1GBってディレクトリ名でエロ動画データ格納出来るのか >>115
バッファオーバーフロー
番犬
スタックとかで調べるとわかりやすい >>129
安善な隠し場所キタ━━━━(゚∀゚)━━━━!! ディレクトリ名で会社の悪口を残していく奴とか出そうだなw >>129
動画はバイナリデータだからパス名に使うテキストにはならんのじゃね? >>134
linuxのフォルは実はテキストなの、コメントにすれば文章残し放題だよ >>135
ファイル名にバイナリが使えないと誰が言った? 俺の語彙力じゃ1GB分の文字列なんて思い浮かべないよ >>138
nullと/使えないから結局そのままは無理だよ >>22
そんなクソみたいなシステムこの世から消せ shellでmkdirをループさせてやればあっちゅうまにできちゃうな >>141
使用禁止数値を除くのはアスキーでも同じだろ よくそんな脆弱性を見つけられたなって思うレベルなんだが >>2
ファイルサーバーの構造を深くする奴のおかげでくだらない制約に引っかかる >>30
カーネルのパッチだから当てはまるかもね
ストレージなんかもベースにLinux使ってるのあるからそいつらもだな
JUNOSにしておけばってBSDもだったらそっちもアウトだが >>147
何言ってるのか意味わからんけどテキストに変換したいだけならbase64みたいなのでエンコードすれば可能 ファイル名を引っ張ってきてエンコード掛けたらあうろり動画になるとかよもまつだな セキュリティ対策でそんなに深いディレクトリ構造にしてるん? 階層深いとパス長すぎて認識しないアプリとか偶にあるよね >>157
FreeNASはBSD系統だから、そっちを注視しろ 自分とこのOSがクソだったリーナス今どんなキムチ? 1GB以上のパス名を書くって何年かかるんだよ(´;ω;`) >>123
1ギガの住所の時点で緯度軽度から何から何まで入れても1メガ程度になるだろうから、無理やり写真とか動画とかをテキストにして住所にしてってそこまでやられてる時点でガバガバな家だな F:¥Document¥うんたらかんたら〜で1Gも文字数使うほど書く事あるんか C言語で作ってるから、こういうミスが起きるんだろうな 正直 sudo コマンドの脆弱性とかの方がヤバいけどね。あんな基本的そうなコマンドでも今現在も延々とコミットされ続けてて、次々に誰かが不具合入れては誰かが直してる。
必ず年間、数十件のゼロデイがあるからsshで入れる時点で簡単にroot権限取れちゃう気がする。 想定外のところで領域がカツカツになる
別の領域をテキトーに探し始める というか浸蝕する
システムに穴が開く
古典的バグですね パスに1GBってどんな欠陥OSだよw
小学生が作ってんのか?www 大昔に気づいて悪用してるやつらがいてもおかしくない >>177
リナックス知らないとムリポw
俺もこの概念掴もうと頑張ってるw >>110
1GBを越えた次の箱ってパーミッションの事?
それだと長い名前ののディレクトリが誰でも名前変えられるようになりました位の効果しかないんでは?素人ですまん >>1
そんな暇どこにあるのかと>パスワードに1GB 悪意なしでパス名ってそんなに長くなることあんのかな
自動生成したファイルなんかはある程度字数が長くならざるを得ないこともあるだろうけど
それでも1KBつまり約1000文字あればほとんどの場合十分すぎるだろ 悪意あるから問題なんだろ?
ない奴には意味無いのは当たり前 >>110
パスの箱が1GBもあるって本当ですか?
じゃあLinuxはメモリ512MBのハードにはメモリ不足でインストール出来ないってこと?
素人ですまん フルパスで1GB超だろ
まあ深さも何処かで制限しておかないとダメだろうな
対策はどうしたのかな?
フルパス長を制限したのかな? >>181
passwordではなく
pathだぞ〜 >>12
これ、ほかでもbuffer allocateしてるところ総チェック必要だな
連休は返上で調査しろ! しかしパスが1GBって凄いな
有り得ない長さのパス上限を決めてたけど、それを越えた時にどう処理するか決めて無かったので穴が出来てしまったと言うことでいいのかな? 権限昇格の脆弱性という事は権限の無いユーザーでログインされてるのが条件ってこと? つかさ、もうツリー構造のファイルシステム辞めたら? 昔は短縮文字が主流だったが
20年ぐらい前からはプログラミングの規則で一般的な単語使うようになったからな
当然パスも長くなる 昔はコンパイラ(やアセンブラ等)で制限(制約?)があったからのぅ >>185
スワップ領域が充分にあれば大丈夫
何でもオンメモリで動いている訳じゃない
いわゆるメインメモリってのはホワイトボードみたいなもの
ある程度の量を書いて消してができる
ストレージはノートや本のように読むだけだったり、しばらく書いたものを保存したり
キャッシュメモリは付箋
ホワイトボードに貼ったり、ノートや本に見出しつけたり
レジスタとアキュムレーターは電卓
そんなイメージ ( ; ; )ビッグサイズフォントステルスタグ怖いゆ >>187
間違えた
けどディレクトリのパス名に1GBなんて何を書いたら良いのかと >>202
ソース見てバグるんじゃねで試した結果なんじゃない? 8192とか32767とか65535とか
そんくらいでいいじゃんMAX_PATH 普通はMAX_PATHと比較してチェックするんだけどな >2014年7月以降に存在した脆弱性
誰かが仕込んだ可能性は? パス名だけで二次記憶装置の容量ぱんぱんとか
どんだけレアな状況だよ root権限奪えるって言っても
そのくそながディレクトリを作成、マウント、削除をされる時点でセキュリティとは…ってならんかとは思わんことはない
他の大抵のことはされそうな気がする >>180
もう見てないだろうけど。
バッファーオーバーラン攻撃ってこんなのだよ、というイメージであって今回の脆弱性のメカニズムの話ではないです。誤解させてしまってたら、ごめんなさい。
そこが「実際はこんな単純ではない」の部分で具体的な話はそれこそ対象のプログラムの作り次第で色々ですね。
例として書いた権限の上書きと同じ仕組みで「プログラムから実行されるコマンドの文字列」を上書きして危険なコマンドを実行させたりも出来ます。権限変更と組み合わせると色々な事が出来ちゃいそうですよね。 >>202
データベースとかアプリケーションとか
もともと糞長の数字羅列で何階層もフォルダ作ったりするし
それの応用というかコピペ繰り返してけば簡単に作れるぞ
試すやつがいなかっただけだ パスは最大44文字で未来永劫十分だぞ
IBMが50年動かしてない仕様なのにこれ以上を求めるオープン系コンピュータの方がおかしいに決まってる アップデートの直後から文字化けがひどくなってたんで、
さっきUbuntuを再インストールしてみたところ。
快適になった。 >>114
具体的にコンソール上でどうなんの?
一般ユーザーで1GBのディレクトリ文字作った後からは
root権限でしか実行できないコマンドが動くようになる感じ? そもそもログイン出来なきゃやられねぇんだしそんな優先度高くねぇな つうか、どうやってんな長い名前打ち込むんだよ
その時点でセキュリティー以前の問題だろ 基本UNIX界隈のセキュリティ意識なんかUNCOだぞ
C言語の標準ライブラリの脆弱性も
MSが_s付き関数作るまで放置されてたし >>224
動画とかそのままバイト列にして入れてしまったのでは? ペイスト繰り返せばいつかはできるだろうが気の長い作業だな パス名1GBって、1GB未満のファイルならファイルそのものよりもパス名が長くなるってことだよな >>229
Windowsみたいにやたら特権ユーザを必要としないからバッファ溢れ程度ではセキュリティ被害無いからな
ただし、アホなSunが設計したNFSは駄目だ たまに使う時に困るんだよなLinuxは仕組みやディレクトリ構造、コマンドとかかなり忘れてるから scanfやgetsみたいに長さ不明の入力を有限のバッファで受けようとするから溢れる んで長さを調節すれば
スタックに積んであるリターン先のアドレスを書き換えることができる Androidは大丈夫なの?
あれ元々Linuxだけど… パス名1Gといってもmkdirで階層を深く掘る必要はなく、ln で再帰的なパスを作れば悪用可能ということ。 ■ このスレッドは過去ログ倉庫に格納されています