吉野家コピペ2022

Posted on

昨日、近所のCVE行ったんです。CVE
そしたらなんかGithub Issueに人がめちゃくちゃいっぱいで追いきれないんです。
で、よく見たらなんか垂れ幕下がってて、ロシアとベラルーシのIPアドレスだったらファイルの中身を片っ端から❤に置換、とか書いてあるんです。

もうね、アホかと。馬鹿かと。
お前らな、戦争如きで普段してないハッキングやってんじゃねーよ、ボケが。

戦争だよ、戦争。

なんかUnityHubとかもいるし。Vue.jsでデスクトップUI開発か。おめでてーな。
よーしパパ平和を祈っちゃうぞー、とか言ってるの。もう見てらんない。
お前らな、もっと純粋な悪意やるからその席空けろと。

OSSってのはな、もっと殺伐としてるべきなんだよ。
コードレビューの向かいに座った奴といつ喧嘩が始まってもおかしくない、
刺すか刺されるか、そんな雰囲気がいいんじゃねーか。チームビルディングされてる職業プログラマは、すっこんでろ。

で、やっと座れたかと思ったら、隣の奴が、これが難読化を解いたコードです、とか言ってるんです。
そこでまたぶち切れですよ。
あのな、こんな難読化は難読化とは言わねーんだよ。ボケが。

得意げな顔して何が、難読化、だ。
お前は本当にこのコードを読んでて難しいと思ったのかと問いたい。問い詰めたい。小1時間問い詰めたい。
お前、Base64って言いたいだけちゃうんかと。

OSS通の俺から言わせてもらえば今、OSS通の間での最新流行はやっぱり、
突然AGPL化、これだね。
今日からAGPLで頒布します。これが通のリリースの仕方。
AGPLってのはサーバサイドで動かしてもソース開示要求できるそん代わりAWSには勝てない。これ。
で、それに突然のリリース。これ最強。

しかしこれを行うとコミュニティにforkされるという危険も伴う、諸刃の剣。
素人にはお薦め出来ない。

まあお前らド素人は、上から降ってきた仕様書読んで書いてなさいってこった。


You may also see

Linuxが消えた:わたしのGithubのリポジトリには赤の他人の知らないコミットが含まれている

Posted on

さよならLinux

今日はびっくりしました。

毎日お世話になっているLinux。その作者がついに嫌気がさしてカーネルのリポジトリからファイルをすべて消去するという痛ましい事件があったからです。

まぁ30年書いてりゃ飽きるよね(?)

ドッキリでした

…というのはもちろん嘘で、これはLinuxの作者、Linus 本人によるものではありません。

では何なのか?といいますと、これは別人のforkされたリポジトリに書かれているものです。

でも、最初の画像はLinusのリポジトリのページだったはずです。おかしいですよね。

Githubはすべてのfork間でデータを共有している?

どうも、Githubでは

  • forkしたリポジトリすべてでデータを共有しており、かつ、
  • githubにはあるコミットIDが自分のリポジトリにあるかそうでないかの区別が付かない

ようなのです。

ブラウザだけでなく、gitを使っても、同じようにLinusのリポジトリからこのコミットを取り出すことができます。

# 初期化
% git init
Initialized empty Git repository in C:/Users/kaede/src/t/.git/

# Linusのリポジトリをoriginとして追加
% git remote add origin git@github.com:torvalds/linux.git

# 問題のコミットだけfetch
% git fetch --depth=1 origin 4fbc49920463c394fc2615f00ecc907a2ce943da
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 638 bytes | 70.00 KiB/s, done.
From github.com:torvalds/linux
 * branch            4fbc49920463c394fc2615f00ecc907a2ce943da -> FETCH_HEAD

# mainブランチにmerge
% git merge 4fbc49920463c394fc2615f00ecc907a2ce943da

# ファイルを確認すると…
% cat README
Hyy there. It's me, Linus Torvalds: See the URL, Where is says /torvals/linux/.

I have deleted my kernel because it is garbage. You should instead check out
this OS called Microsoft Windows Vista. It is much smaller and faster then linux
ever was.

...

いや…これ…シンプルに頭おかしい仕様だろ…

ジョークならいいけどさ

今回はジョークだから、いいですよ。でも、悪い大人が悪用したらどうなるんでしょうね?

Linusに限らず、自分のリポジトリのURLで自分の名前を騙って意見などを書くことができるわけです。フェイクニュースの情報源にぴったりです。今回の例なら、「Linux開発者がLinuxを削除!Linuxを利用しているIT企業への影響は…」みたいな「ニュース」を書いたら市場が動いたりすらするかもしれません。

フィッシングに使うこともできますね。「このコミットでセキュリティ問題を修正したらしい。詳しくはここのソースのn行目に書いてあるURLを見てくれ」と書いておけば、Linusのリポジトリなら信用できると思った人がリンクをクリックしてくれるかもしれません。

任意のソースコードを実行させることだってできるかもしれません。上記に書いた通り、gitのコマンドを通してコミットIDの時点のスナップショットが取得できます。「このリビジョンで問題が修正されてるらしいから、使ってみて。cloneは重いからこの方法でshallow fetchするといいよ」と言いながら複数行のコマンドを渡されたら、あなたは「Linusやその他有名な人・公式アカウントなどのURLなら大丈夫」と思ってターミナルにコピペしませんか?でもそのコミットは実はマルウェアが仕込まれてるバージョンかもしれません

最後に。オリジナルのリポジトリと同じSHA-1ハッシュのコミットが生成できれば、オリジナルのリポジトリを汚染することができるかもしれません。これはgithub側の実装次第なので、なんとも言えません。

ストレージが高いのは分かるけど…

なんでこんな事になってしまったのでしょう。

これは推測ですが、たぶんストレージを節約したかったからだと思います。Linuxのリポジトリは数GBありますが、それを4万回もForkされたときに実直にコピーしてたら数10TBになってしまいます。

悪意を抜きにすれば、forkしたリポジトリ間でデータを共有しても、とくに問題ありません。別人の書いたforkのコミットには、それぞれオリジナルの作者のものとは違うコミットIDが振られます。同じ根本から違う枝が生えるだけです。

しかし、セキュリティの面では悪手です。

今まで見た通りのことに加えて、最近信用性の下がってきたSHA-1が問題になってきます。SHA-1はGitでそれぞれのコミットを識別するために使われます。セキュリティ担保のためには使われれてません(本人談)。しかし、データを共有したとなると、これはセキュリティ問題になりえます。githubのgitの実装次第ですが、もし同じコミットIDをpushしたときに上書きされるような挙動になっていた場合、fork先がfork元のリポジトリを汚染できてしまうかもしれませんgithub社は内製のgitサーバを用いており、それを知るすべはありません。

どうすれば…

SHA-1はまだそこまで破られてはいないので気にする必要は今のところないかもしれません。ただ、コミットをgpgで署名してなりすましを防ぐのは有効かもしれません。まぁ、Gitの最初の開発者でもあるLinusは普段からしてないようですが…。

一応、githubには署名されていないコミットにフラグを立てる機能があるので、これを有効にするのもいいかもしれません。ただ、そのフラグを忙しい現代人(スマホを覗くとだいたい暇つぶししてますけど)が見てくれるかどうかは別問題です。

gitにもgithubにも飽きた

正直なところ、飽きた。もう14年?くらい使ってるよ。飽きたよ。githubも10年以上使ってるよ。飽きたよ。なんかない?