
CVE-2021-33831用の自動化Perlエクスプロイト。大学のコンタクトトレーシングWebアプリケーションで未認証のユーザー登録と訪問作成を標的とし、大量アカウント作成とサービス拒否を実証します。
このアプリケーションは、ドイツの感染症法に従って人物を追跡し、Covid-19の感染連鎖を追跡できるようにするために使用されます。 これはiCampusという学生プロジェクトによって作成され、ヴィルダウ大学だけでなくコトブス・ゼンフテンベルク大学でも使用されています。約1万人が影響を受けています。大学の来訪者はこのアプリケーションの使用を求められます。
アプリケーションはVueフロントエンドとLaravelバックエンドで構成されています。
バックエンドはゲストユーザー登録エンドポイント /corona-app-backend/api/account/register を公開しており、
大学の来訪者の登録が可能です。大学の構成員は、シングルサインオンのユーザー名/パスワードの組み合わせでログインできます。
この登録エンドポイントは、ユーザーの自動生成(例:キャプチャによる)から保護されていません。プログラムが /corona-app-backend/sanctum/csrf-cookie を介してCSRFクッキーを取得し、/corona-app-backend/account を介してセッショントークンを取得すると、ユーザーを作成できます。好きなだけ。好きなだけ長く。偽のユーザーが多すぎると、保健機関が感染連鎖を追跡することが事実上不可能になり、これはサービス拒否攻撃の一種です。
ユーザーの登録は、CSRFクッキーとセッショントークンを含む以下のJSONペイロードを登録エンドポイントにPOSTすることです:
{"first_name":"John","last_name":"Doe","telephone":"099182","email":null,"accept":true}
emailまたはphoneフィールドのいずれかを設定する必要があります。両方とも(構文チェック以外は)検証されていません。
有効なユーザーセッションを使用すると、エンドポイント /corona-app-backend/api/visit を介して訪問(部屋へのチェックイン)を作成できます。
訪問は、CSRFクッキーとセッショントークンを含む以下のJSONペイロードを訪問エンドポイントにPOSTすることです:
{"room":"15-K01","visited_on":"2021-05-09T22:01:00.000Z","exited_on":"2021-05-10T21:59:00.000Z"}
roomフィールドの値は、部屋エンドポイント /corona-app-backend/api/rooms から取得できるリストから入手でき、大学のすべての部屋を含むJSONを返します。呼び出しを成功させるには、CSRFクッキーとセッショントークンだけが必要です。
この問題は CVE-2021-33840 と比較できますが、はるかに深刻です。
また、アプリケーションはフロントエンド/バックエンド部分に(HTTPSによる転送暗号化を除く)暗号化を一切含んでいません。バックエンドは暗号化されていないJSONデータを受け取り、暗号化されていないJSONデータを提供します。
Perl言語で書かれた完全自動化されたエクスプロイトコードは、(ランダムな名前データベースから)500人のユーザーをランダムだが有効に見える電話番号で作成し、すべてのユーザーを1つの部屋にチェックインさせます。完全自動化。サーバーに過負荷をかけず、存在するかもしれない保護を発動させないために、リクエストあたり5秒の遅延が挿入されました。 エクスプロイトは完全に自動化されて成功し、同日中に問題と作成された偽ユーザーを大学に報告しました。
部屋を選ぶ前に、その日にその部屋が訪問されていないことを確認しました。これは、アプリケーションが特定の部屋で自分と接触した人数のカウンターを含んでいるため可能です。つまり、ある部屋を訪問し、そのカウンターが0であれば、その時間帯にその部屋に他の人はいなかったことになります。
アプリケーションは CVE-2021-3129 によるRCEの影響も受けており、2021年4月12日に大学に報告しました。
現在の問題は2021年5月31日に報告されました。
両方の報告に対して、報告した翌日に受領確認メールを受け取りました。その後、他には何も受け取っていません。
アプリケーションのソースコードへの要求が進行中です。