[cmake-developers] file(DOWNLOAD) + EXPECTED_HASH security issue

Brad King brad.king at kitware.com
Tue Nov 19 10:34:41 EST 2013


On 11/19/2013 10:24 AM, Daniele E. Domenichelli wrote:
> After calling file(DOWNLOAD EXPECTED_HASH) I cannot find a way to check
> if the hash is correct.
> 
> * The command gives an error, but not fatal, therefore the processing
> will continue;

IIRC the use case for which this was built put file(DOWNLOAD) inside
a script invoked with "cmake -P" (see ExternalProject).  That will
still exit with a bad code and the caller will see it.

> * The "STATUS" variable is not set, therefore it is not useful;
> * The "faulty" downloaded file is not removed.
> 
> So I believe that there is no way to stop CMake, unless you perform
> another hash check.

The "this->SetError/return false" logic for these errors should be
replaced by "this->IssueMessage(cmake::FATAL_ERROR,...)/return true"
to switch it to a fatal error.  The signature should be extended
to provide an option to get the error information back without
causing a CMake Error so that the caller can handle it.

> I suggest to fix this as soon as possible (perhaps even in the 2.8
> series), either failing with a fatal error or setting the STATUS
> variable. What do you think?

The feature was originally built as EXPECTED_MD5 which is definitely
*not a security check* but rather a corruption check.  It was then
generalized to EXPECTED_HASH just because other hashes algorithms
are now available, so only then did it become useful for security.
The above fix is a change in behavior which IMO does not belong in
a tweak release.

-Brad



More information about the cmake-developers mailing list