Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

memory exhaustion in ReadSUNImage #543

Closed
bestshow opened this issue Jul 5, 2017 · 2 comments
Closed

memory exhaustion in ReadSUNImage #543

bestshow opened this issue Jul 5, 2017 · 2 comments
Labels

Comments

@bestshow
Copy link

bestshow commented Jul 5, 2017

Version: ImageMagick 7.0.6-1 Q16 x86_64
#./magick identify $FILE
When identify SUN file , imagemagick will allocate memory to store the data, here is the critical code:
sun.c , in function ReadSUNImage:

        if (AcquireImageColormap(image,image->colors,exception) == MagickFalse)  //345
          ThrowReaderException(ResourceLimitError,"MemoryAllocationFailed");

colormap.c , in function AcquireImageColormap:

image->colormap=(PixelInfo *) AcquireQuantumMemory(image->colors+1,  //119
      sizeof(*image->colormap));

memory.c in function AcquireQuantumMemory(const size_t count,const size_t quantum):

  extent=count*quantum; //535
  return(AcquireMagickMemory(extent));

AcquireMagickMemory is the same to malloc.

image->colors can be controlled by struct _SUNInfo value "sun_info", and sun_info is read from ReadBlobMSBLong(image) as follow, in other words image->colors can be read from input file.

...
 sun_info.width=ReadBlobMSBLong(image); //309
 sun_info.height=ReadBlobMSBLong(image);
 sun_info.depth=ReadBlobMSBLong(image);
 sun_info.length=ReadBlobMSBLong(image);
 sun_info.type=ReadBlobMSBLong(image);
 sun_info.maptype=ReadBlobMSBLong(image);
 sun_info.maplength=ReadBlobMSBLong(image);
...

Here is my policy.xml to limit memory usage,but 256MB limit can be bypassed.

...
<policy domain="resource" name="area" value="100MP"/>
<policy domain="resource" name="memory" value="256MiB"/>
...

testcase: https://github.com/bestshow/p0cs/blob/master/memory_exhaustion_in_ReadSUNImage
Credit: ADLab of Venustech

@mikayla-grace
Copy link

Thanks for the problem report. We can reproduce it and will have a patch to fix it in GIT master branch @ https://github.com/ImageMagick/ImageMagick later today. The patch will be available in the beta releases of ImageMagick @ http://www.imagemagick.org/download/beta/ by sometime tomorrow.

@dlemstra dlemstra added the bug label Jul 5, 2017
@dlemstra dlemstra closed this as completed Jul 5, 2017
dlemstra pushed a commit that referenced this issue Jul 5, 2017
@nohmask
Copy link

nohmask commented Sep 8, 2017

This was assigned CVE-2017-12435.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

No branches or pull requests

4 participants