ctypes security issue and Python 2
In the middle of February, the Python developers revealed that Python had been affected by a buffer overflow security issue, CVE-2021-3177. The relatively full details are covered in ctypes: Buffer overflow in PyCArg_repr, and conveniently the original bug report has a very simple reproduction that can also serve to test your Python to see if it's fixed:
$ python2 Python 2.7.17 (default, Feb 25 2021, 14:02:55) >>> from ctypes import * >>> c_double.from_param(1e300) *** buffer overflow detected ***: python2 terminated Aborted (core dumped)
(A fixed version will report '
<cparam 'd' (1e+300)>' here.)
The official bug report only covers Python 3, because Python 2.7 is not supported any more, but as you can see here the bug is present in Python 2 as well (this is the Ubuntu 18.04 version, which is unfixed for reasons).
I'm on record as saying that it was very unlikely for security issues to be discovered in Python 2 after this long. Regardless of how significant this issue is in practice, I was and am wrong. A buffer overflow has lurked in the standard Python library, including Python 2, and was only discovered after official Python support for Python 2 has stopped. There have been other recent security issues in Python 3, per Python security vulnerabilities, and some of them may also apply to Python 2 and be significant for you.
(Linux distributions are still fixing issues like this in Python 2. Well, more or less. Ubuntu hasn't worked out a successful fix for 18.04 and hasn't even tried one for 20.04, but Fedora has fixed the issue.)
This CVE is not an issue for our Python 2 code, where we don't use
ctypes. But it
does make me somewhat more concerned about our remaining Python 2
programs, for the simple reason that I was wrong about one of my beliefs
about Python 2 after its end of support. To use a metaphor, what I
thought was a strong, well-inspected pillar has turned out to have some
previously unnoticed cracks of a sort that matter, even if they've
not yet been spotted in an area that's load-bearing for us. Also,
now I should clearly be keeping an eye on Python security issues and
testing new ones (if possible) to see if they apply to Python 2. If they
do, we'll need to explicitly consider what programs of ours might be
(The answer is often likely to be 'no programs are affected'. but we can no longer take for granted that the issues are not serious and don't affect Python 2 or us.)
As far as the severity of this issue goes, on the one hand buffer overruns are quite bad, but on the other hand this is in what is a relatively obscure corner of Python for most people. This is not the sort of Python security issue that would let people break ordinary Python 2 programs (and I still think that those are very unlikely by now). But I'm a bit biased here, since we're not going to drop everything and port all of our remaining Python 2 programs to Python 3 right now (well, not unless we absolutely have to).
(People's views of the severity may vary; these are just mine.)
PS: To be explicit, this issue has not changed my view that it's
reasonable (and not irresponsible) to continue running Python 2
programs and code. This is not a great sign for people who use
ctypes, but it's not a fatal vulnerability or a major problem sign.
Comments on this page:Written on 02 March 2021.