4 ms·
ImageMagick shouldn't have been using /bin/sh or system() in the first place. Instead it should use fork+exec or libpipeline. http://bonedaddy.net/pabs3/log/20
by ashitlerferad 11y ago
ImageMagick shouldn't have been using /bin/sh or system() in the first place. Instead it should use fork+exec or libpipeline.
http://bonedaddy.net/pabs3/log/2014/02/17/pid-preservation-society/ http://bonedaddy.net/pabs3/log/2014/02/17/pid-preservation-s...
http://libpipeline.nongnu.org/ http://libpipeline.nongnu.org/
I expect there may also be option injection vulnerabilities in the code.
http://www.defensecode.com/public/DefenseCode_Unix_WildCards_Gone_Wild.txt http://www.defensecode.com/public/DefenseCode_Unix_WildCards...
- ntauthority 11y agoBoth don't exist on non-POSIX systems, like NT. ImageMagick supports those natively, however.
- ashitlerferad 11y agoISTR NT has other mechanisms for that.
- sitkack 11y agoSecurity is a spectrum, beware of falling into a https://en.wikipedia.org/wiki/False_dilemma https://en.wikipedia.org/wiki/False_dilemma
- poizan42 11y agoSo? Use CreateProcess on NT then Edit: Actually it already does: https://github.com/ImageMagick/ImageMagick/blob/master/MagickCore/nt-base.c#L2243 https://github.com/ImageMagick/ImageMagick/blob/master/Magic...
- ashitlerferad 11y agoIt seems like CreateProcess uses the one-long-string for the command rather than the POSIX model of one string per argument. Is there any way to run a process on Windows using one string per argument?
- JdeBP 11y agoActually, it's (normally) two strings, one for the program image filename and one for the command tail. * https://msdn.microsoft.com/en-gb/library/windows/desktop/ms682425(v=vs.85).aspx https://msdn.microsoft.com/en-gb/library/windows/desktop/ms6... A single command tail is the Win32 model at base, as it was the DOS API model before it. (The OS/2 model was multiple command tails, although in practice most programs read no more than just one.) exec*() implementations are layered on top of this, and the argv[] notion is a shared fiction maintained by the runtime libraries of C and C++ implementations.