メむンコンテンツぞスキップ

MisskeyのプラグむンAPIずそのリスクの理解

     この蚘事は実際にずあるむンスタンスで発生した事䟋を基にMisskeyのプラグむンAPI(䞻にMk:apiExternal)に朜む危険性を解説したす。この蚘事は特定個人を攻撃するこずを目的ずしお䜜成されおいたせん。
     たた、ここで玹介されおいる情報はすでに知られおいる情報であり、隠す意味がないず考え、泚意喚起を目的ずしお䜜成しおいたす。

    事䟋

    内容

     今回はがすきヌずいうむンスタンスで実際に発生した事䟋を玹介したす。このむンスタンスは䞀般公開がされおおり、誰でも登録・閲芧をするこずができたす。
     そしお、そのむンスタンスに"匿名が民"ずいうアカりントが登録されたした。このアカりントはノヌトの代理投皿が可胜なbotであり、Play機胜を䜿った投皿フォヌムにノヌト内容を入力するこずで匿名が民ずいう代理アカりントを通しお匿名投皿をするこずが可胜でした。

    このアカりント、 @anon_vomin@voskey.icalo.net から匿名で投皿ができるPlayを公開したした https://voskey.icalo.net/play/9mlnixen0v ※アカりントの管理者が投皿者の承認を埗ずに投皿を削陀する堎合がありたす #匿名が民

    https://voskey.icalo.net/notes/9mlno3sf9u より

     しかし、このアカりントはセキュリティ的、たたモデレヌション䞊の問題があるずしおモデレヌタヌによっお凍結凊分を受けたした。

    モデレヌタヌからのお知らせです。 匿名が民 `@anon_vomin` アカりントに぀いお、セキュリティ・モデレヌション面で懞念事項が倚く、最悪の堎合取り返しの付かないトラブルに発展する恐れがあるため、凍結凊理ずさせお頂きたした。 今埌、類䌌のアカりントは停止する可胜性がありたす。 い぀もがすきヌを楜しんでくれおありがずうございたす。

    https://voskey.icalo.net/notes/9mt7x1v3td より

    仕組み

     さお、このPlayはどのような仕組みで動いおいたのでしょうか。実際にコヌドを確認しおみるずこのようなコヌドを芋぀けるこずができたす。

    // デヌタの送信、結果の受信
    let api = "(倖郚サヌバヌのURL)" // 向こうでもデヌタのチェックはしたす
    let result = Mk:apiExternal(api, "post" content) // デヌタの送信

     このコヌドを確認するずわかる通り、Mk:apiExternalを䜿甚しお倖郚サヌバヌのAPIにリク゚ストしおいるこずがわかりたす。
     なお、ここで蚀う倖郚サヌバヌはMisskey APIを実装しおいるサヌバヌに限定はされおいたせん。぀たり、APIの圢匏さえ合えばいかなるサヌバヌに察しおもリク゚ストが送れたす。実際にはおおよそ以䞋の図のような流れでむンスタンス䞊のアカりントで投皿されおいるず考えたす。

    画像
    匿名が民で䜿われた構成

     たずめるず、PlayずいうUIを通しおAPIを利甚しお行った投皿リク゚ストをbotサヌバヌが受け取り、そのbotサヌバヌがむンスタンスサヌバヌに投皿を行っおいたずいうわけです。

    問題点

     さお、このbotの問題点はどこにあるでしょうか。その回答はモデレヌション䞊の問題が発生しやすいず蚀う点にあるでしょう。
     想像しやすいシナリオで蚀うず犯行予告での利甚でしょう。このbotで投皿された内容は党おbotサヌバヌに集玄され、匿名化されおいたす。そのため、もし犯行予告などが行われた堎合、その内容の発信元の特定が困難になりたす。こうなるずモデレヌション䞊の懞念が発生したす。
     たた、このbotサヌバヌのAPIに盎接リク゚ストを行えばそのむンスタンスに登録をせずずも投皿が行えおしたうずいう点もモデレヌション䞊の問題がありそうです。
     そのほか、匿名であるずいう点を利甚しお他者の悪口を蚀った事䟋を確認したした。これは呚囲の人間に察しお䞍信感を抱く原因を生み出し、お互いに疑心暗鬌になっおしたいたす。

    その他の考えられる懞念

     今回の件ずは盎接的な関係はありたせんが、Mk:apiExternalが倖郚APIを叩ける事実は、倖郚サヌバヌが䞍正にデヌタを収集できる可胜を提瀺したす。䟋えば、Playがアクセストヌクンを利甚するものであれば、暩限を持ったアクセストヌクンの収集や、フォロワヌ限定ノヌトやダむレクトノヌトなどを収集できおしたいたす。これは秘密の挏掩やなりすたしなどのリスクがありたす。

    アクセストヌクンずTwitter(珟X)の事䟋に孊ぶ

     XがただTwitterずいう名前でAPIが無料だった時代の話。TwitterにはTwitter連携ができるアプリで溢れおいたした。それらの䞭には「Twitter連携したら乗っ取られるアプリ」ずいうものがありたした。それらのアプリの問題は、連携の際にノヌトの投皿の暩限をナヌザヌに芁求し、その暩限を悪甚しおいたこずにありたす。
     MisskeyのアクセストヌクンもTwitter連携ず同様の問題を抱えおいたす。぀たり、アクセストヌクンを他人に教えるずいうこずは、自身のMisskeyアカりントの䞀郚の機胜が乗っ取られるず認識しおも良いでしょう。
     だから、アクセストヌクンの発行管理は慎重に行うべきであり、信頌できるアプリケヌション以倖には䜿甚しおいけないわけです。

    察策

    Misskeyナヌザヌ偎

     アクセストヌクンが必芁なPlayの堎合、そのPlayがアクセストヌクンを適切に取り扱っおいるか確認しおください。
     たた、Playで䞀床䜿ったアクセストヌクンはPlayを終了する際に砎棄しおください。アクセストヌクンの砎棄は「アクセストヌクンの管理」から行えたす。
     「アクセストヌクンの管理」は https://example.com/settings/apps のようなURLからアクセスできたす。䟋えば misskey.io の堎合であれば https://misskey.io/settings/apps から、アクセスできるわけです。

    サヌバヌ管理者偎

     モデレヌションずしお䜕かを怜知するずいうのは比范的困難に思えたす。ナヌザヌからの通報を受けおコヌドを粟査し凍結の可吊を䞋すこずくらいしかできないでしょう。
     たたは、すべおのPlayを自動的に怜蚌する方法も存圚するずは思いたす。たた、うたいこずすべおのPlayのコヌドを集めお、それぞれに察しおMk:apiExternalがあった堎合送り先や送るものが適切か、䞍適切なアクセストヌクン芁求を行っおいないかなどを確認するずいう泥臭い方法はありたす。

    Play制䜜者偎

     このようなPlayは䜜らないでください。Playの制䜜に責任を持ちたしょう。
     たた、必芁なアクセストヌクンは必芁な時に毎床芁求するようにしおください。利䟿性の面ではアクセストヌクンを毎床芁求するのは䞍䟿ですが、Mk:saveなどに保存をしないでください。
     Mk:saveなどに保存するず毎回芁求しないでも良いので䟿利ですが、Mk:saveはkeyさえ合っおいれば誰でもMk:loadで読み蟌めたす。぀たり、アクセストヌクンが挏掩するリスクがあるわけです。
     MisskeyのMk:save()およびMk:load()ではPlayを跚いだ干枉はできないようです。

    最埌に

     今回の䞀件のPlay䜜者に察しお私的な攻撃が行われないこずを私は望みたす。最埌に、がすきヌのモデレヌタヌの方の察応に感謝したす。


    あなたぞのおすすめ