Дефект TLS/SSL в продуктах Apple

У Apple – грандиозная ошибка в коде, отвечающем за установление TLS-соединения: лишний оператор goto (зачем они вообще его использовали?) приводит к тому, что не проверяется серверная подпись при генерации ключа по протоколу Диффи-Хеллмана. Это означает, что сессия может прослушиваться, так как атакующий получает возможность подменить сеансовый ключ. Ошибка, можно сказать, сводит защищённость TLS в соответствующих продуктах Apple примерно к нулю.

Addon:
Пожалуй, скопирую и фрагмент исходного кода:

static OSStatus
SSLVerifySignedServerKeyExchange(SSLContext *ctx, bool isRsa, SSLBuffer signedParams,
                               uint8_t *signature, UInt16 signatureLen)
{
	OSStatus        err;
	...

	if ((err = SSLHashSHA1.update(&hashCtx, &serverRandom)) != 0)
		goto fail;
	if ((err = SSLHashSHA1.update(&hashCtx, &signedParams)) != 0)
		goto fail;
		goto fail;
	if ((err = SSLHashSHA1.final(&hashCtx, &hashOut)) != 0)
		goto fail;
	...

fail:
	SSLFreeBuffer(&signedHashes);
	SSLFreeBuffer(&hashCtx);
	return err;
}

Речь, как несложно догадаться, о паре последовательных goto. Второй из операторов безусловен, а так как переменная err, в случае, если ошибочный goto выполнился, содержит 0, то и сама функция “проверки” вернёт этот код успешного завершения.

()

Похожие записки:



Далее - мнения и дискуссии

(Сообщения ниже добавляются читателями сайта, через форму, расположенную в конце страницы.)

Комментарии читателей блога: 2

  • 1. 23rd February 2014, 22:45 // Читатель jno написал:

    круто!
    слов нет.
    и code review у них, похоже, тоже нет.
    как и coding style checkup…
    ппц.

  • 2. 24th February 2014, 01:45 // Читатель Alex написал:

    Это же эталонная реализация бэкдора! Выглядит как простая опечатка, а дело делает.