customIdの信頼性に起因するセキュリティ上の問題について
7/8時点では攻撃を受ける可能性はありません。
ドキュメントに従えば適切な検証措置を講ずる必要がまだあります。
Your application should take care to validate data sent in component interactions. For example, ensuring that the custom_id originates from the received message. In the future this information will be validated by the API.
サーバーで検証されるようになったようです。
message components are fully validated on our servers now, so you shouldn't have to worry about receiving invalid interactions in any case now.
概要
書き換えから保護されていないcustomIdを信頼して処理を行っていました。
ボタンを使ってみようでは、customIdがDiscord APIによって検証されていないことを把握せず、それに基づいてロールを付与する処理をしていたため、customIdを書き換えることにより、攻撃者はbotに、botの付与できる任意のロールを付与させることができました。 6/30 12:45以降Discord APIがcustomIdを検証するため、攻撃はできないと思われます。
7/8時点でSelectMenuのvaluesは検証されていません。
サーバーで検証されるようになったようです。
影響
ボタンを使ってみようを利用していた場合は、botの操作できる任意のロールが攻撃者によって6/30 12:45までの間に、取得されていた可能性があります。 https://gyazo.com/7e7644f9daa937bb0486c97fbf698539
customIdを信頼して、何らかの処理を行っていた場合は期間中にcustomId等の書き換えが行われていた場合に、どのような状況が発生するかは個々のケースによります。
必要と思われる対応
ボット開発者は、customIdが期間中に改ざんされていた場合の影響を調べ、必要な措置を講ずる必要があります。
ボタンを使ってみようを利用した場合は期間中に、botを利用し、botにロールを不正に付与させたと思われる人物がいないか確認する必要があります。 ログがなくても、権限があるならば、Audit Log等の確認などで行えます。
もし権限がない場合は、利用者に通知し、ロールを不正に取得したと思われる人物がいないか確認して頂く必要があります。
それとは別に、セキュリティ上の問題があったことを利用者に報告することを推奨します。
経緯
この頃、Discord APIはcustomIdを検証していませんでした。
ドキュメントには記載されていましたが、ドキュメントにこのことが記載されていない時期に読んで、信頼していい値なんだなと思いこんだまま記事を書きました。
6/30にcustomIdが検証されるようになった旨をdiscordのスタッフが述べています。
このことも私は6/30時点でまだ知りませんでした。
7/5にSelectMenuのvaluesを信頼していいのかふと検証しようと思い、valuesを書き換えたリクエストを行い検証したところそのままbot側に到達したため、discordに問題を報告しました。
customIdを書き換えた場合、bot側にリクエストは到達しませんでした。
その時はcustomIdは書き換えから保護されており、ドキュメントにvaluesを信頼してはならないという記載はなかったため、検証対象に加え忘れたのかなという認識でした。
customIdは検証されていたはずではと疑問に思ってblameしたところ上記二件のPRを発見しました。
ご迷惑をおかけして申し訳ありませんが対応のほどよろしくおねがいいたしますtig.icon
付記
https://media.discordapp.net/attachments/619531508109148160/862342938268270624/unknown.png?width=995&height=283
valuesの書き換えによって何が可能なのか
これは、6/30 12:45以前にボタンを使ってみようの記事のコードを使用していた場合に可能でもあったことです