<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>CVE-2021-33035</title>
  </head>

  <body>
    <p>
      <a href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=2021-33035">CVE-2021-33035</a>
    </p>
    <p>
      <a href="https://www.openoffice.org/security/cves/CVE-2021-33035.html">Apache OpenOffice Advisory</a>
    </p>
    <p style="text-align:center; font-size:largest">
      <strong>CVE-2021-33035 Buffer overflow from a crafted DBF file</strong>
    </p>
    <p style="text-align:center; font-size:larger">
      <strong>Fixed in Apache OpenOffice 4.1.11</strong>
    </p>
    <p>
      <strong>Description</strong>
    </p>
    <p>
      Apache OpenOffice opens dBase/DBF documents and shows the contents as spreadsheets. DBF are database
      files with data organized in fields. When reading DBF data the size of certain fields is not checked:
      the data is just copied into local variables. A carefully crafted document could overflow the allocated
      space, leading to the execution of arbitrary code by altering the contents of the program stack.
    </p>
    <p>
      <strong>Severity: Moderate</strong>
    </p>
    <p>
      There are no known exploits of this vulnerability.
      <br />
      A proof-of-concept demonstration exists.
    </p>
    <p>
      Thanks to the reporter for discovering this issue.
    </p>
    <p>
      <strong>Vendor: The Apache Software Foundation</strong>
    </p>
    <p>
      <strong>Versions Affected</strong>
    </p>
    <p>
      All Apache OpenOffice versions 4.1.10 and older are affected.
      <br />
      OpenOffice.org versions may also be affected.
    </p>
    <p>
      <strong>Mitigation</strong>
    </p>
    <p>
      Install Apache OpenOffice 4.1.11 for the latest maintenance and cumulative security fixes.
      Use the Apache OpenOffice <a href="https://www.openoffice.org/download/"> download page</a>.
    </p>
    <p>
      <strong>Acknowledgments</strong>
    </p>
    <p>
      The Apache OpenOffice Security Team would like to thank Eugene Lim, Government Technology
      Agency of Singapore, for discovering and reporting this attack vector.
    </p>
    <p>
      <strong>Further Information</strong>
    </p>
    <p>
      For additional information and assistance, consult the
      <a href="https://forum.openoffice.org/">Apache OpenOffice Community Forums</a>
      or make requests to the
      <a href="mailto:users@openoffice.apache.org">users@openoffice.apache.org</a>
      public mailing list.
    </p>
    <p>
      The latest information on Apache OpenOffice security bulletins can be found at the
      <a href="https://www.openoffice.org/security/bulletin.html">Bulletin Archive page</a>.
    </p>
    <hr />
    <p>
      <a href="https://security.openoffice.org">Security Home</a>-&gt;
      <a href="https://www.openoffice.org/security/bulletin.html">Bulletin</a>-&gt;
      <a href="https://www.openoffice.org/security/cves/CVE-2021-33035.html">CVE-2021-33035</a>
    </p>
  </body>
</html>
