This vulnerability is an attacker controlled corruption of the intermediate language state of a compiled regular expression. The corruption occurs when Perl's regular expression compiler calls S_study_chunk() in a recursive fashion to optimize the intermediate language representation of a regular expression. An attacker could abuse this behavior to insert instructions into the compiled form of a Perl regular expression.
Acknowledgments: Name: Sergey Aleynikov
(In reply to Todd Cullum from comment #4) > Mitigation: > > To mitigate this flaw, developers should not pass untrusted or uncontrolled > data to the Perl regular expression engine; especially in cases where the > regular expression is used in input sanitization, validation, or filtering. This flaw is about compiling an untrusted regular expression. Not about matching an untrusted text.
Mitigation: To mitigate this flaw, developers should not allow untrusted regular expressions to be compiled by the Perl regular expression compiler.
This flaw is caused by code in the S_study_chunk() routine of regcomp.c which handles the GOSUB regopcode. S_study_chunk() performs recursive calls which could mutate data that an outer call was already working on, when handling a GOSUB opcode. Upstream's patch has added booleans called in_gosub, mutate_ok, and was_mutate_ok which are set and checked before mutations occur to ensure that the current recursion depth does not mutate data being worked on by an outer frame. Instead, the outer frame should handle the mutation to avoid corrupting the intermediate language representation of the regular expression and the possibility of an attacker inserting instructions into compiled Perl regular expressions.
Upstream Patch: https://github.com/perl/perl5/commit/66bbb51b93253a3f87d11c2695cfb7bdb782184a
Upstream issues: https://github.com/Perl/perl5/issues/16947 https://github.com/Perl/perl5/issues/17743
References: https://github.com/Perl/perl5/blob/blead/pod/perl5303delta.pod https://github.com/Perl/perl5/compare/v5.30.2...v5.30.3
Created perl tracking bugs for this issue: Affects: fedora-all [bug 1844664]
The fixes are now published in Perl versions 5.28.3 and 5.30.3. https://metacpan.org/pod/release/XSAWYERX/perl-5.28.3/pod/perldelta.pod https://metacpan.org/pod/release/XSAWYERX/perl-5.30.3/pod/perldelta.pod
This issue has been addressed in the following products: Red Hat Enterprise Linux 7 Via RHSA-2021:0343 https://access.redhat.com/errata/RHSA-2021:0343
This bug is now closed. Further updates for individual products will be reflected on the CVE page(s): https://access.redhat.com/security/cve/cve-2020-12723
This issue has been addressed in the following products: Red Hat Enterprise Linux 8 Via RHSA-2021:0557 https://access.redhat.com/errata/RHSA-2021:0557
This issue has been addressed in the following products: Red Hat Enterprise Linux 7.6 Extended Update Support Via RHSA-2021:0883 https://access.redhat.com/errata/RHSA-2021:0883
This issue has been addressed in the following products: Red Hat Enterprise Linux 7.7 Extended Update Support Via RHSA-2021:1032 https://access.redhat.com/errata/RHSA-2021:1032
This issue has been addressed in the following products: Red Hat Enterprise Linux 7.4 Advanced Update Support Red Hat Enterprise Linux 7.4 Update Services for SAP Solutions Red Hat Enterprise Linux 7.4 Telco Extended Update Support Via RHSA-2021:1266 https://access.redhat.com/errata/RHSA-2021:1266
This issue has been addressed in the following products: Red Hat Enterprise Linux 8.2 Extended Update Support Via RHSA-2021:2184 https://access.redhat.com/errata/RHSA-2021:2184