研究者らが、JavaとPythonにファイアウォールの迂回を可能にする恐れのある脆弱性が存在することを明らかにした。
Alexander Klink氏とBlindspot SecurityのTimothy Morgan氏がそれぞれ、ここ1週間の間に公開した2件のセキュリティアドバイザリによると、この脆弱性の原因は、JavaがFTPプロトコルのユーザー名の構文を適切に検証していないことにある。
FTPでは認証がサポートされているが、JavaのXML eXternal Entity(XXE)は、ユーザー名中のキャリッジリターン(CR)とラインフィード(LF)の有無を検証していないという。
その結果、攻撃者は「user」コマンドや「pass」コマンドを改行で中断し、FTPセッションに新しいコマンドを挿入することができる。このことを利用して、SMTPサーバにコマンドを送信すると、任意のSMTPコマンドを実行させたり、リモートからサーバに接続して不正に電子メールを送信させることが可能になる。
Klink氏は、「この攻撃は、(制限のない、場合によってはスパムやマルウェアのフィルタリングも行われていない)メールサーバに、XMLのパーシングを行っているマシンから到達できる場合に特に問題になる。URLの長さを制約するのは利用できるRAMのサイズだけだと考えられるため、この手法を使って添付ファイルを送信することさえできる(ただし、400Mバイトの長さのURLをパーシングしたところ、何らかの理由で32Gバイト以上のRAMが消費された)」と述べている。
この脆弱性は、悪質なJNLPファイルをパーシングさせる、中間者攻撃を実行する、サーバサイドリクエストフォージェリ(SSRF)を使用した攻撃を行うなどの目的にも利用できる。
Morgan氏によれば、この脆弱性を悪用することで、「対象のファイアウォールを迂回して、インターネットから脆弱性が存在するホストのシステムに対して、『大きな番号』(1024~65535)のポートを使用したTCP接続を行うことが可能になる恐れがある」という。
Javaの場合、デスクトップPCのユーザーがブラウザのJavaプラグインを無効にしている場合でさえ、攻撃を実行できる。
Morgan氏はまた、Pythonのライブラリ(urllib2とurllib)にも「ほぼ同一」のバグが存在すると述べている。同氏によれば、Pythonのセキュリティチームには2016年1月に、Oracleには2016年11月にこの問題について通知したにも関わらず、脆弱性はまだ修正されていないという。
この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。