0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[OWASP Juice Shop] FTPのアクセス制御回避

Last updated at Posted at 2023-08-06

挨拶

こんにちは、昨今名古屋港での障害が発生したり、セキュリティ対策が叫ばれるようになっていますね。
私も学生でありながら頻繁にセキュリティーにまつわるニュースやお話をお伺いすることが多いです。

今回解説する範囲

今回は問題の解き方を解説するのではなく、いくつかの問題を解く際に使用するテクニックについてOWASP juice shopのソースコード付きで解説いたします。

解説本文

OWASP juice shopではアナウンスのテキスト文書などを/ftpに配置して企業情報などのページからハイパーリンクでファイルへ直接アクセスできるようにされています。
※/ftpの内容
image.png
※/#/aboutで実際に使われている/ftp/legal.mdに対するハイパーリンク
image.png
※/ftp/legal.mdの内容
image.png
しかし、この/ftpというエンドポイントでは機微情報を含むファイルまで同ディレクトリで管理されており、情報の保護が不十分といえるのではないでしょうか。一応のアクセス制御としてダウンロード可能なものを.mdか.pdfのみに絞るというアクセス制御がなされておりますが、このアクセス制御はバイナリセーフではないため、悪用が可能です。攻撃コードを紹介する前に、アクセス制御の仕組みを解説しておきます。このアクセス制御では、ユーザからのリクエストがあると、そのリクエストされたファイル名の拡張子がPDFかMDであるかどうか検査します。ちょうどこのコードが/ routes/ fileServer.tsにあり、要約すると以下のようなコードのような単純な比較によって行われておりました。

   //ファイル名の検査
  if (utils.endsWith(fileName, ".md") || utils.endsWith(fileName, ".pdf")) {
    //ファイル名からヌルバイト以降を削除
    fileName = security.cutOffPoisonNullByte(fileName);
    //ファイル内容をクライアントへ送信
    return res.sendFile(path.resolve("ftp/", fileName));
  }

このコードの問題点はずばり処理の順番だと思います。ではここで、以下のような攻撃コードが渡された場合を考えてみましょう。
/ftp/secret.txt%2500.pdf
ひとまず%2500は%25がパーセントを表すため%00になり、ヌルバイトを表します。
ちなみに%2500をそのままヌルバイトを表す%00にしてリクエストしてみるとBad Requestになりました。(単なるヌル文字はブロックするようになっているのだと思います)
そして終端に.pdfとついているため、アクセス制御には適合いたします。次にヌルバイト以降を削除するため、/ftp/secret.txtになります。これにより、secret.txtに対するアクセスが成立してしまいます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?