1

\r\nキーを入力して memcached サーバーから値を取得すると、それを使用して memcached プロトコルを挿入し、別のコマンドを実行できることがわかりました。以下はコード例です。

PHP の場合:

<?php
$m = new Memcached();
$m->addServer('localhost', 11211);

$key = "foo\r\nset bar 0 10 10000\r\n";

echo $m->get($key);
echo $m->get($key); // <- hang here
?>

Python の場合:

import pylibmc

mc = pylibmc.Client(['127.0.0.1:11211'])

key = 'foo\r\nset bar 0 10 10000\r\n';
print mc.get(key)
print mc.get(key) # <- hang here

がユーザーから読み取られた場合key、ユーザーは memcached サーバーで任意のコマンドを実行できます。たとえば、実行flush_allして Web サイトの速度を低下させたり、別のユーザーのパスワード キャッシュを設定したりできます。

クライアント ライブラリがこれらの不正な文字を削除しないのはなぜですか? 私のコードでそれを適切に防ぐ方法は?

4

1 に答える 1