blob: 55726b60570e3ab5b631019e16df2665d56162f5 [file] [log] [blame]
<!--{
"Title": "Go Security Policy",
"layout": "article"
}-->
<h2 id="overview">Overview</h2>
<p>
This document explains the Go Security team's process for handling issues
reported and what to expect in return.
</p>
<h2 id="reporting">Reporting a Security Bug</h2>
<p>
All security bugs in the Go distribution should be reported by email to
<a href="mailto:security@golang.org">security@golang.org</a>. This mail is
delivered to the Go Security team.
</p>
<p>
To ensure your report is not marked as spam,
<strong>please include the word "vulnerability"</strong> anywhere in your
email. Please use a descriptive subject line for your report email.
</p>
<p>
Your email will be acknowledged within 7 days, and you'll be kept up to date
with the progress until resolution. Your issue will be fixed or made public
within 90 days.
</p>
<p>
If you have not received a reply to your email within 7 days,
please follow up with the Go security team again at
<a href="mailto:security@golang.org">security@golang.org</a>. Please make
sure the word <strong>vulnerability</strong> is in your email.
</p>
<p>
If after 3 more days you have still not received an acknowledgement of your
report, it is possible that your email might have been marked as spam.
In that case, please <a href="https://g.co/vulnz">file an issue here</a>.
Select <i>"I want to report a technical security or an abuse risk related bug
in a Google product (SQLi, XSS, etc.)"</i>, and list <i>"Go"</i> as the
affected product.
</p>
<h2 id="tracks">Tracks</h2>
<p>
Depending on the nature of your issue, it will be categorized by the Go
security team as an issue in the PUBLIC, PRIVATE, or URGENT track. All
security issues will be issued CVE numbers.
</p>
<h3 id="public">PUBLIC</h3>
<p>
Issues in the PUBLIC track affect niche configurations, have very limited
impact, or are already widely known.
</p>
<p>
PUBLIC track issues are <strong>fixed in public</strong>, and get backported
to the next scheduled
<a href="/wiki/MinorReleases">minor releases</a>
(which occur ~monthly). The release announcement includes details of these
issues, but there is no pre-announcement.
</p>
<p>Examples of past PUBLIC issues include:</p>
<ul>
<li>
<a href="/issue/44916">#44916</a>:
archive/zip: can panic when calling Reader.Open
</li>
<li>
<a href="/issue/44913">#44913</a>:
encoding/xml: infinite loop when using xml.NewTokenDecoder with a custom
TokenReader
</li>
<li>
<a href="/issue/43786">#43786</a>:
encoding/xml: infinite crypto/elliptic: incorrect operations on the P-224
curve
</li>
<li>
<a href="/issue/40928">#40928</a>:
net/http/cgi,net/http/fcgi: Cross-Site Scripting (XSS) when Content-Type is
not specified
</li>
<li>
<a href="/issue/40618">#40618</a>:
encoding/binary: ReadUvarint and ReadVarint can read an unlimited number of
bytes from invalid inputs
</li>
<li>
<a href="/issue/36834">#36834</a>:
crypto/x509: certificate validation bypass on Windows 10
</li>
</ul>
<h3 id="private">PRIVATE</h3>
<p>
Issues in the PRIVATE track are violations of committed security properties.
</p>
<p>
PRIVATE track issues are
<strong>fixed in the next scheduled
<a href="/wiki/MinorReleases">minor releases</a>
</strong>,
and are kept private until then.
</p>
<p>
Three to seven days before the release, a pre-announcement is sent to
golang-announce, announcing the presence of a security fix in the upcoming
releases, and whether the issue affects the standard library, the toolchain,
or both (but not disclosing any more details).
</p>
<p>Some examples of past PRIVATE issues include:</p>
<ul>
<li>
<a href="/issue/42552">#42552</a>:
math/big: panic during recursive division of very large numbers
</li>
<li>
<a href="/issue/34902">#34902</a>:
net/http: Expect 100-continue panics in httputil.ReverseProxy
</li>
<li>
<a href="/issue/39360">#39360</a>:
crypto/x509: Certificate.Verify method seemingly ignoring EKU requirements
on Windows
</li>
<li>
<a href="/issue/34960">#34960</a>:
crypto/dsa: invalid public key causes panic in dsa.Verify
</li>
<li>
<a href="/issue/34540">#34540</a>:
net/http: invalid headers are normalized, allowing request smuggling
</li>
<li>
<a href="/issue/29098">#29098</a>:
net/url: URL.Parse Multiple Parsing Issues
</li>
</ul>
<h3 id="urgent">URGENT</h3>
<p>
URGENT track issues are a threat to the Go ecosystem’s integrity, or are being
actively exploited in the wild leading to severe damage. There are no recent
examples, but they would include remote code execution in net/http, or
practical key recovery in crypto/tls.
</p>
<p>
URGENT track issues are fixed in private, and
<strong>trigger an immediate dedicated security release</strong>, possibly
with no pre-announcement.
</p>
<h2 id="flagging">Flagging Existing Issues as Security-related</h2>
<p>
If you believe that an <a href="/issue">existing issue</a>
is security-related, we ask that you send an email to
<a href="mailto:security@golang.org">security@golang.org</a>. The email should
include the issue ID and a short description of why it should be handled
according to this security policy.
</p>
<h2 id="disclosure">Disclosure Process</h2>
<p>The Go project uses the following disclosure process:</p>
<ol>
<li>
Once the security report is received it is assigned a primary handler. This
person coordinates the fix and release process.
</li>
<li>The issue is confirmed and a list of affected software is determined.</li>
<li>Code is audited to find any potential similar problems.</li>
<li>
If it is determined, in consultation with the submitter, that a CVE number is
required, the primary handler will obtain one.
</li>
<li>
Fixes are prepared for the two most recent major releases and the
head/master revision. Fixes are prepared for the two most recent major
releases and merged to head/master.
</li>
<li>
On the date that the fixes are applied, announcements are sent to
<a href="https://groups.google.com/group/golang-announce">golang-announce</a>,
<a href="https://groups.google.com/group/golang-dev">golang-dev</a>, and
<a href="https://groups.google.com/group/golang-nuts">golang-nuts</a>.
</li>
</ol>
<p>
This process can take some time, especially when coordination is required with
maintainers of other projects. Every effort will be made to handle the bug in
as timely a manner as possible, however it's important that we follow the
process described above to ensure that disclosures are handled consistently.
</p>
<p>
For security issues that include the assignment of a CVE number, the issue is
listed publicly under the
<a href="https://www.cvedetails.com/vulnerability-list/vendor_id-14185/Golang.html">
"Golang" product on the CVEDetails website
</a>
as well as the
<a href="https://web.nvd.nist.gov/view/vuln/search">
National Vulnerability Disclosure site
</a>.
</p>
<h2 id="updates">Receiving Security Updates</h2>
<p>
The best way to receive security announcements is to subscribe to the
<a href="https://groups.google.com/forum/#!forum/golang-announce">
golang-announce
</a>
mailing list. Any messages pertaining to a security issue will be prefixed
with <code>[security]</code>.
</p>
<h2 id="comments">Comments on This Policy</h2>
<p>
If you have any suggestions to improve this policy, please
<a href="/issue/new">file an issue</a> for discussion.
</p>