Closed Ry0taK closed 5 years ago
@Ry0taK Pull Reqありがとうございます。これは以前から認知されている脆弱性なので(※参照: https://twitter.com/theoldmoon0602/status/1143693408294227968 ) 修正するにやぶさかではないですが、この方法だとシェル芸リバーシ (https://twitter.com/minyoruminyon/status/1154459096193437696 ) のようなユースケースが潰れてしまうのでだめですね……。というわけでかつて実行したシェル芸のURLのか何かのsetを持っておくことになると思うんですが、面倒なので放置していました。そちらの実装にしてくれたらマージしようと思いますし、面倒であればこのまま放置でも問題ないです(一回やってもらうのも面白いと思っているので)
こんな感じでどうでしょうか...?
こうしないと一番最初のシェル芸が2回実行されるので修正
要約
tweet.goにおいて、2つ以上のツイートを再帰的に引用した場合の判定が行われていなかったため、無限ループを起こせた問題の修正。
説明
自身を参照する再帰的ツイートは、tweet.goの34行目から36行目で処理しないように設計されていますが、2つ以上のツイートを再帰的に繋げた場合(1つ目のツイートで2つ目のツイートIDを当て、2つ目のツイートで1つ目のツイートを参照した場合)はこの制限を回避することが出来ます(...多分)。 時間と運を要するため、PoCは作成していませんが、(多分)実際に攻撃可能(だと思うけど自信がない)です。(ちなみにPoCが出来ていないためコードのテストもしてません。) これによる攻撃が発生した場合、Botの応答が停止したりはしませんが(main.goの115行目にて非同期になっているため)、何度も繰り返すことによりリソースを過度に消費させることが可能(かもしれないけどわからない)です。