CVE-2022-41903: Integer overflow in `git archive`, `git log --format` leading to RCE in git

Published Jan 17, 2023
·
Updated

A flaw was found in Git, a distributed revision control system. This issue occurs due to an integer overflow in pretty.c::formatandpadcommit(), where a sizet is stored improperly as an int, and then added as an offset to a memcpy(). This overflow can be triggered directly by a user running a command which invokes the commit formatting machinery (e.g., git log --format=...). It may also be triggered indirectly through the git archive via the export-subst mechanism, which expands format specifiers inside files within the repository during a git archive. This integer overflow can result in arbitrary heap writes, which may allow arbitrary code execution.

Other sources

Git is distributed revision control system. git log can display commits in an arbitrary format using its --format specifiers. This functionality is also exposed to git archive via the export-subst gitattribute. When processing the padding operators, there is a integer overflow in pretty.c::formatandpadcommit() where a sizet is stored improperly as an int, and then added as an offset to a memcpy(). This overflow can be triggered directly by a user running a command which invokes the commit formatting machinery (e.g., git log --format=...). It may also be triggered indirectly through git archive via the export-subst mechanism, which expands format specifiers inside of files within the repository during a git archive. This integer overflow can result in arbitrary heap writes, which may result in arbitrary code execution. The problem has been patched in the versions published on 2023-01-17, going back to v2.30.7. Users are advised to upgrade. Users who are unable to upgrade should disable git archive in untrusted repositories. If you expose git archive via git daemon, disable it by running git config --global daemon.uploadArch false.

The git-log command has the ability to display commits using an arbitrary format with its --format specifiers. This functionality is also exposed to git-archive via the export-subst gitattribute.

GitLab

Affected Software

19 affected componentsFixes available
redhat/git<0:1.8.3.1-24.el7_9
0:1.8.3.1-24.el7_9
redhat/git<0:2.31.1-3.el8_7
0:2.31.1-3.el8_7
redhat/git<0:2.18.4-2.el8_1
0:2.18.4-2.el8_1
redhat/git<0:2.18.4-3.el8_2
0:2.18.4-3.el8_2
redhat/git<0:2.27.0-3.el8_4
0:2.27.0-3.el8_4
redhat/git<0:2.31.1-3.el8_6
0:2.31.1-3.el8_6
redhat/git<0:2.31.1-3.el9_1
0:2.31.1-3.el9_1
redhat/git<0:2.31.1-3.el9_0
0:2.31.1-3.el9_0
redhat/rh-git227-git<0:2.27.0-4.el7
0:2.27.0-4.el7
git-scm Git<=2.30.6
git-scm Git>=2.31.0<=2.31.5
git-scm Git>=2.32.0<=2.32.4
git-scm Git>=2.33.0<=2.33.5
git-scm Git>=2.34.0<=2.34.5
git-scm Git>=2.35.0<=2.35.5
git-scm Git>=2.36.0<=2.36.3
git-scm Git>=2.37.0<=2.37.4
git-scm Git>=2.38.0<=2.38.2
git-scm Git=2.39.0

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade redhat/git to a version that resolves this vulnerability.

    Fixed in 0:1.8.3.1-24.el7_9
  2. Upgrade

    Upgrade redhat/git to a version that resolves this vulnerability.

    Fixed in 0:2.31.1-3.el8_7
  3. Upgrade

    Upgrade redhat/git to a version that resolves this vulnerability.

    Fixed in 0:2.18.4-2.el8_1
  4. Upgrade

    Upgrade redhat/git to a version that resolves this vulnerability.

    Fixed in 0:2.18.4-3.el8_2
  5. Upgrade

    Upgrade redhat/git to a version that resolves this vulnerability.

    Fixed in 0:2.27.0-3.el8_4
  6. Upgrade

    Upgrade redhat/git to a version that resolves this vulnerability.

    Fixed in 0:2.31.1-3.el8_6
  7. Upgrade

    Upgrade redhat/git to a version that resolves this vulnerability.

    Fixed in 0:2.31.1-3.el9_1
  8. Upgrade

    Upgrade redhat/git to a version that resolves this vulnerability.

    Fixed in 0:2.31.1-3.el9_0
  9. Upgrade

    Upgrade redhat/rh-git227-git to a version that resolves this vulnerability.

    Fixed in 0:2.27.0-4.el7
  10. Upgrade

    Upgrade git/git to a version that resolves this vulnerability.

    Fixed in 2.30.7
  11. Configuration

    Disable exposing git archive via `git daemon` by setting `daemon.uploadArch` to `false` (run: `git config --global daemon.uploadArch false`).

    Git (git daemon) daemon.uploadArch = false

Event History

Jan 17, 2023
CVE Published
12:00 AM
Data Sourced
via GitLab·12:00 AM
Description
CVE Published
via MITRE·10:17 PM
Data Sourced
via MITRE·10:17 PM
DescriptionSeverityWeakness
Jan 18, 2023
Data Sourced
via Red Hat·05:01 PM
DescriptionSeverityAffected Software

Peer vulnerabilities

Found alongside the following vulnerabilities.

Frequently Asked Questions

1

What is CVE-2022-41903?

CVE-2022-41903 is a flaw found in Git, a distributed revision control system, that occurs due to an integer overflow in pretty.c.

2

How does CVE-2022-41903 affect Git?

CVE-2022-41903 affects Git by causing an integer overflow when processing the padding operators in the --format specifiers of git log and git archive.

3

What is the severity of CVE-2022-41903?

CVE-2022-41903 has a severity level of 9.8 (critical).

4

Which versions of Git are affected by CVE-2022-41903?

Git versions 1.8.3.1-24.el7_9 to 2.39.0 are affected by CVE-2022-41903.

5

How can I fix CVE-2022-41903?

To fix CVE-2022-41903, update Git to a version that includes the necessary security patches.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203