
Tinyproxyで発見された重大なUse-After-Free脆弱性
我々は、テロ組織ハマスに人質として連れ去られたすべての市民の安全な帰還を要求します。すべての人が解放され、無事に帰宅するまで、我々は決して休みません。あなたも彼らを家に連れ戻すために力を貸せます。 https://stories.bringthemhomenow.net/
🚨 重大な脆弱性警告 🚨
🔍 CVE-2023-49606 は、軽量HTTP/SプロキシサーバーであるTinyproxyで発見された重大なUse-After-Free脆弱性です。この欠陥は、Tinyproxyのバージョン1.11.1および1.10.0におけるHTTP Connection Headerの処理に存在します。この脆弱性により、サービス拒否(DoS)攻撃が可能になり、特定の条件下ではリモートコード実行(RCE)に至る可能性があります。
📈 CVSSスコア: 9.8(Critical)
この脆弱性は、HTTPヘッダーを処理する際のメモリの不適切な管理に起因します。ソースコードhttp-message.cでは、HTTPヘッダーのメモリ操作(割り当て、再割り当て、解放)が行われています。問題は、メモリの再割り当てとその後の解放済みメモリへのアクセス(正しくヌル化されていない)のコンテキストで発生する可能性があります。
以下はhttp-message.cからの該当コードの抜粋です:
/* Function to add headers to the HTTP message structure */
void http_message_add_headers(http_message_t *msg, const char **headers, unsigned int num_headers) {
const char **new_headers;
unsigned int i;
if (headers == NULL) {
return;
}
// Check if there is enough space, if not, reallocate
if (msg->headers.used + num_headers > msg->headers.total) {
new_headers = (const char **) safecalloc (msg->headers.total * 2, sizeof(char *));
if (new_headers == NULL) {
return; // Allocation failed, potential for use-after-free if not handled
}
// Copy existing headers to the new array
for (i = 0; i != msg->headers.used; ++i) {
new_headers[i] = msg->headers.strings[i];
}
safefree(msg->headers.strings); // Free old array
msg->headers.strings = new_headers; // Danger if old pointers are used post this point
msg->headers.total *= 2;
}
// Add new headers to the structure
for (i = 0; i != num_headers; ++i) {
msg->headers.strings[i + msg->headers.used] = headers[i];
}
msg->headers.used += num_headers;
}