# 2023-11-27
## 編集履歴
* 2023-11-27 初版
* 2023-11-27 詳細の追記
## はじめに
昨今ではTwitter/Xによる中央政権への反発から、中央政権を必要としないActivityPubに対応していると謳うMastodonやMisskeyへのアクティブユーザーの移行が進んでいる中で、Misskeyの実装においてプロトコル上で要求されるセキュリティの基礎的な検証が欠けていたことには驚きを隠せません。特に、syuilo氏によってその必要性が1年前から[認識](https://github.com/misskey-dev/misskey/commit/21331e53fec869d445bd89056ed24ef235540d87#diff-777735d82d9e090f52f196bab74ea34c4d34f2dfbe75d81cb8af2f798f7e33e3R102)されていた可能性があり、そのコメントが今回の修正を指しているのだとすれば呆れを禁じ得ません。
## 詳細
2018年3月にW3CがRecommendationとして公表したActivityPubの規格書では、[§3](https://www.w3.org/TR/activitypub/#obj)に次の通り書かれています。
> 3. Objects
> (snip)
> Servers *SHOULD* validate the content they receive to avoid content spoofing attacks. (A server should do something at least as robust as checking that the object appears as received at its origin, but mechanisms such as checking signatures would be better if available). No particular mechanism for verification is authoritatively specified by this document, but please see Security Considerations for some suggestions and good practices.
ここで*SHOULD*というのは斜体も含めて原文通りの表記であり、[RFC 2119](https://datatracker.ietf.org/doc/html/rfc2119)に基づいて解釈されるべき要請度であることを示しています。これは
- 無視することができる理由があるかもしれない
- しかし、従わないことを選択する場合はその選択を確定する前に影響を**完全に**把握 (full implications must be understood) した上で慎重に決断 (carefully weighed) されなければならない
という意味です。
W3Cの規格書では出所の署名及び検証を行う手段について特に規定していませんが、HTTP Signaturesが事実上の標準となっています。HTTP Signaturesが何かについてはより詳しい[ActivityPubまとめwiki](https://scrapbox.io/activitypub/HTTP_Signatures)や[IETFのドラフト文書](https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-message-signatures)に譲ります。
## 脆弱性の対応について
今回の脆弱性は悪意をもった第三者が全てのサーバーの全てのユーザーの発言内容を偽造できるという、サーバーの信頼性を根本から揺るがす詐称が可能であったために、[これまでに判明した脆弱性](https://github.com/misskey-dev/misskey/security)の対応よりも**より一層**慎重な対応が求められる場面でした。
しかしながら、私はSilicon Forest (以下SF)、SFに所属するperillamint氏、及びsyuilo氏の事後対応は混乱をもたらすものであると考えています。
第一に、syuilo氏が行った[GitHub上のコミット](https://github.com/misskey-dev/misskey/commit/65c5626b65ee00d2663ec3604140a18427b65cdc) によって当該脆弱性を「修正した」という文言がはっきり残されているため、攻撃者はProof of Concept (PoC; 攻撃方法の概念証明) をより明確に組み立てられることが予想されます。
第二に、[SIF-2023-0002](https://advisory.silicon.moe/advisory/sif-2023-002/)は上記のGitHubのコミットを参照しているため、混乱を増長させる効果のほうが大きく、SFが掲げる[90+30ルール](https://advisory.silicon.moe/about/)に沿っていたとしても具体的な差分は非開示であるべきです。
第三に、影響度が高いにもかかわらず、リリースノートに記載が行われていません。これについては即時の対策を行うために自ら出向いて記載を行いました。
## 私からのお願い
すでにインターネットに放流してしまったものは事実上取り消しが不可能です。そこで、私からのお願いです:
* Misskeyを運営している方へ: あなたのサーバーが2023.11.0未満のバージョンを使っているのであれば、あなたのサーバーの発言内容が他のサーバーにおいて偽造される危険性があります。速やかにアップグレードあるいは変更を行ってください。
* syuilo氏以外の、[misskey-dev/misskey](https://github.com/misskey-dev/misskey)に書き込み権限を持ち、プログラミングに詳しい人へ: syuilo氏により一層慎重な脆弱性対応をするよう進言してください。特に、脆弱性の修正を行う際にはどのような対応を取るべきか独断を行わず他人に相談するように進言してください。