quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

VULN-DISCLOSURE-POLICY.md (15259B)


      1 <!--
      2 Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
      3 
      4 SPDX-License-Identifier: curl
      5 -->
      6 
      7 # curl vulnerability disclosure policy
      8 
      9 This document describes how security vulnerabilities are handled in the curl
     10 project.
     11 
     12 ## Publishing Information
     13 
     14 All known and public curl or libcurl related vulnerabilities are listed on
     15 [the curl website security page](https://curl.se/docs/security.html).
     16 
     17 Security vulnerabilities **should not** be entered in the project's public bug
     18 tracker.
     19 
     20 ## Vulnerability Handling
     21 
     22 The typical process for handling a new security vulnerability is as follows.
     23 
     24 No information should be made public about a vulnerability until it is
     25 formally announced at the end of this process. That means, for example, that a
     26 bug tracker entry must NOT be created to track the issue since that makes the
     27 issue public and it should not be discussed on any of the project's public
     28 mailing lists. Messages associated with any commits should not make any
     29 reference to the security nature of the commit if done prior to the public
     30 announcement.
     31 
     32 - The person discovering the issue, the reporter, reports the vulnerability on
     33   [HackerOne](https://hackerone.com/curl). Issues filed there reach a handful
     34   of selected and trusted people.
     35 
     36 - Messages that do not relate to the reporting or managing of an undisclosed
     37   security vulnerability in curl or libcurl are ignored and no further action
     38   is required.
     39 
     40 - A person in the security team responds to the original report to acknowledge
     41   that a human has seen the report.
     42 
     43 - The security team investigates the report and either rejects it or accepts
     44   it. See below for examples of problems that are not considered
     45   vulnerabilities.
     46 
     47 - If the report is rejected, the team writes to the reporter to explain why.
     48 
     49 - If the report is accepted, the team writes to the reporter to let them
     50   know it is accepted and that they are working on a fix.
     51 
     52 - The security team discusses the problem, works out a fix, considers the
     53   impact of the problem and suggests a release schedule. This discussion
     54   should involve the reporter as much as possible.
     55 
     56 - The release of the information should be "as soon as possible" and is most
     57   often synchronized with an upcoming release that contains the fix. If the
     58   reporter, or anyone else involved, thinks the next planned release is too
     59   far away, then a separate earlier release should be considered.
     60 
     61 - Write a security advisory draft about the problem that explains what the
     62   problem is, its impact, which versions it affects, solutions or workarounds,
     63   when the release is out and make sure to credit all contributors properly.
     64   Figure out the CWE (Common Weakness Enumeration) number for the flaw. See
     65   [SECURITY-ADVISORY](https://curl.se/dev/advisory.html) for help on creating
     66   the advisory.
     67 
     68 - Request a CVE Id for the issue. curl is a CNA (CVE Numbering Authority) and
     69   can request its own numbers.
     70 
     71 - Update the "security advisory" with the CVE number.
     72 
     73 - The security team commits the fix in a private branch. The commit message
     74   should ideally contain the CVE number. If the severity level of the issue is
     75   set to Low or Medium, the fix is allowed to get merged into the master
     76   repository via a normal PR - but without mentioning it being a security
     77   vulnerability.
     78 
     79 - The monetary reward part of the bug-bounty is managed by the Internet Bug
     80   Bounty team and the reporter is asked to request the reward from them after
     81   the issue has been completely handled and published by curl.
     82 
     83 - No more than seven days before release, inform
     84   [distros@openwall](https://oss-security.openwall.org/wiki/mailing-lists/distros)
     85   to prepare them about the upcoming public security vulnerability
     86   announcement - attach the advisory draft for information with CVE and
     87   current patch. 'distros' does not accept an embargo longer than 7 days and
     88   they do not care for Windows-specific flaws.
     89 
     90 - No more than 48 hours before the release, the private branch is merged into
     91   the master branch and pushed. Once pushed, the information is accessible to
     92   the public and the actual release should follow suit immediately afterwards.
     93   The time between the push and the release is used for final tests and
     94   reviews.
     95 
     96 - The project team creates a release that includes the fix.
     97 
     98 - The project team announces the release and the vulnerability to the world in
     99   the same manner we always announce releases. It gets sent to the
    100   curl-announce, curl-library and curl-users mailing lists.
    101 
    102 - The security webpage on the website should get the new vulnerability
    103   mentioned.
    104 
    105 ## security (at curl dot se)
    106 
    107 This is a private mailing list for discussions on and about curl security
    108 issues.
    109 
    110 Who is on this list? There are a couple of criteria you must meet, and then we
    111 might ask you to join the list or you can ask to join it. It really is not a
    112 formal process. We basically only require that you have a long-term presence
    113 in the curl project and you have shown an understanding for the project and
    114 its way of working. You must have been around for a good while and you should
    115 have no plans of vanishing in the near future.
    116 
    117 We do not make the list of participants public mostly because it tends to vary
    118 somewhat over time and a list somewhere only risks getting outdated.
    119 
    120 ## Publishing Security Advisories
    121 
    122 1. Write up the security advisory, using markdown syntax. Use the same
    123    subtitles as last time to maintain consistency.
    124 
    125 2. Name the advisory file after the allocated CVE id.
    126 
    127 3. Add a line on the top of the array in `curl-www/docs/vuln.pm`.
    128 
    129 4. Put the new advisory markdown file in the `curl-www/docs/` directory. Add it
    130    to the git repository.
    131 
    132 5. Run `make` in your local web checkout and verify that things look fine.
    133 
    134 6. On security advisory release day, push the changes on the curl-www
    135    repository's remote master branch.
    136 
    137 ## Disclose the report
    138 
    139 Request the issue to be disclosed. If there are sensitive details present in
    140 the report and discussion, those should be redacted from the disclosure. The
    141 default policy is to disclose as much as possible as soon as the vulnerability
    142 has been published.
    143 
    144 *All* reports submitted to the project, valid or not, should be disclosed and
    145 made public.
    146 
    147 ## Bug Bounty
    148 
    149 See [BUG-BOUNTY](https://curl.se/docs/bugbounty.html) for details on the
    150 bug bounty program.
    151 
    152 # Severity levels
    153 
    154 The curl project's security team rates security problems using four severity
    155 levels depending how serious we consider the problem to be. We use **Low**,
    156 **Medium**, **High** and **Critical**. We refrain from using numerical scoring
    157 of vulnerabilities.
    158 
    159 We do not support CVSS as a method to grade security vulnerabilities, so we do
    160 not set them for CVE records published by the curl project. We believe CVSS is
    161 a broken system that often does not properly evaluate to suitable severity
    162 levels that reflect all dimensions and factors involved. Other organizations
    163 however set and provide CVSS scores for curl vulnerabilities. You need to
    164 decide for yourself if you believe they know enough about the subjects
    165 involved to make reasonable assessments. Deciding between four different
    166 severity levels is hard enough for us.
    167 
    168 When deciding severity level on a particular issue, we take all the factors
    169 into account: attack vector, attack complexity, required privileges, necessary
    170 build configuration, protocols involved, platform specifics and also what
    171 effects a possible exploit or trigger of the issue can lead to, including
    172 confidentiality, integrity or availability problems.
    173 
    174 ## Low
    175 
    176 This is a security problem that is truly hard or unlikely to exploit or
    177 trigger. Due to timing, platform requirements or the fact that options or
    178 protocols involved are rare etc. [Past
    179 example](https://curl.se/docs/CVE-2022-43552.html)
    180 
    181 ## Medium
    182 
    183 This is a security problem that is less hard than **Low** to exploit or
    184 trigger. Less strict timing, wider platform availability or involving more
    185 widely used options or protocols. A problem that usually needs something else
    186 to also happen to become serious. [Past
    187 example](https://curl.se/docs/CVE-2022-32206.html)
    188 
    189 ## High
    190 
    191 This issue is in itself a serious problem with real world impact. Flaws that
    192 can easily compromise the confidentiality, integrity or availability of
    193 resources. Exploiting or triggering this problem is not hard. [Past
    194 example](https://curl.se/docs/CVE-2019-3822.html)
    195 
    196 ## Critical
    197 
    198 Easily exploitable by a remote unauthenticated attacker and lead to system
    199 compromise (arbitrary code execution) without requiring user interaction, with
    200 a common configuration on a popular platform. This issue has few restrictions
    201 and requirements and can be exploited easily using most curl configurations.
    202 [Past example](https://curl.se/docs/CVE-2000-0973.html)
    203 
    204 # Not security issues
    205 
    206 This is an incomplete list of issues that are not considered vulnerabilities.
    207 
    208 ## Small memory leaks
    209 
    210 We do not consider a small memory leak a security problem; even if the amount
    211 of allocated memory grows by a small amount every now and then. Long-living
    212 applications and services already need to have countermeasures and deal with
    213 growing memory usage, be it leaks or just increased use. A small memory or
    214 resource leak is then expected to *not* cause a security problem.
    215 
    216 Of course there can be a discussion if a leak is small or not. A large leak
    217 can be considered a security problem due to the DOS risk. If leaked memory
    218 contains sensitive data it might also qualify as a security problem.
    219 
    220 ## Never-ending transfers
    221 
    222 We do not consider flaws that cause a transfer to never end to be a security
    223 problem. There are already several benign and likely reasons for transfers to
    224 stall and never end, so applications that cannot deal with never-ending
    225 transfers already need to have counter-measures established.
    226 
    227 If the problem avoids the regular counter-measures when it causes a never-
    228 ending transfer, it might be a security problem.
    229 
    230 ## Not practically possible
    231 
    232 If the flaw or vulnerability cannot practically get executed on existing
    233 hardware it is not a security problem.
    234 
    235 ## API misuse
    236 
    237 If a reported issue only triggers by an application using the API in a way
    238 that is not documented to work or even documented to not work, it is probably
    239 not going to be considered a security problem. We only guarantee secure and
    240 proper functionality when the APIs are used as expected and documented.
    241 
    242 There can be a discussion about what the documentation actually means and how
    243 to interpret the text, which might end up with us still agreeing that it is a
    244 security problem.
    245 
    246 ## Local attackers already present
    247 
    248 When an issue can only be attacked or misused by an attacker present on the
    249 local system or network, the bar is raised. If a local user wrongfully has
    250 elevated rights on your system enough to attack curl, they can probably
    251 already do much worse harm and the problem is not really in curl.
    252 
    253 ## Debug & Experiments
    254 
    255 Vulnerabilities in features which are off by default (in the build) and
    256 documented as experimental, or exist only in debug mode, are not eligible for a
    257 reward and we do not consider them security problems.
    258 
    259 The same applies to scripts and software which are not installed by default
    260 through the make install rule.
    261 
    262 ## URL inconsistencies
    263 
    264 URL parser inconsistencies between browsers and curl are expected and are not
    265 considered security vulnerabilities. The WHATWG URL Specification and RFC
    266 3986+ (the plus meaning that it is an extended version) [are not completely
    267 interoperable](https://github.com/bagder/docs/blob/master/URL-interop.md).
    268 
    269 Obvious parser bugs can still be vulnerabilities of course.
    270 
    271 ## Visible command line arguments
    272 
    273 The curl command blanks the contents of a number of command line arguments to
    274 prevent them from appearing in process listings. It does not blank all
    275 arguments, even though some that are not blanked might contain sensitive
    276 data. We consider this functionality a best-effort and omissions are not
    277 security vulnerabilities.
    278 
    279  - not all systems allow the arguments to be blanked in the first place
    280  - since curl blanks the argument itself they are readable for a short moment
    281    no matter what
    282  - virtually every argument can contain sensitive data, depending on use
    283  - blanking all arguments would make it impractical for users to differentiate
    284    curl command lines in process listings
    285 
    286 ## Busy-loops
    287 
    288 Busy-loops that consume 100% CPU time but eventually end (perhaps due to a set
    289 timeout value or otherwise) are not considered security problems. Applications
    290 are supposed to already handle situations when the transfer loop legitimately
    291 consumes 100% CPU time, so while a prolonged such busy-loop is a nasty bug, we
    292 do not consider it a security problem.
    293 
    294 ## Saving files
    295 
    296 curl cannot protect against attacks where an attacker has write access to the
    297 same directory where curl is directed to save files.
    298 
    299 ## Tricking a user to run a command line
    300 
    301 A creative, misleading or funny looking command line is not a security
    302 problem. The curl command line tool takes options and URLs on the command line
    303 and if an attacker can trick the user to run a specifically crafted curl
    304 command line, all bets are off. Such an attacker can just as well have the
    305 user run a much worse command that can do something fatal (like
    306 `sudo rm -rf /`).
    307 
    308 ## Terminal output and escape sequences
    309 
    310 Content that is transferred from a server and gets displayed in a terminal by
    311 curl may contain escape sequences or use other tricks to fool the user. This
    312 is curl working as designed and is not a curl security problem. Escape
    313 sequences, moving cursor, changing color etc, is also frequently used for
    314 good. To reduce the risk of getting fooled, save files and browse them after
    315 download using a display method that minimizes risks.
    316 
    317 ## NULL dereferences and crashes
    318 
    319 If a malicious server can trigger a NULL dereference in curl or otherwise
    320 cause curl to crash (and nothing worse), chances are big that we do not
    321 consider that a security problem.
    322 
    323 Malicious servers can already cause considerable harm and denial of service
    324 like scenarios without having to trigger such code paths. For example by
    325 stalling, being terribly slow or by delivering enormous amounts of data.
    326 Additionally, applications are expected to handle "normal" crashes without
    327 that being the end of the world.
    328 
    329 There need to be more and special circumstances to treat such problems as
    330 security issues.
    331 
    332 ## Legacy dependencies
    333 
    334 Problems that can be triggered only by the use of a *legacy dependency* are
    335 not considered security problems.
    336 
    337 A *legacy dependency* is here defined as:
    338 
    339 - the legacy version was released over ten years ago AND
    340 
    341 - the legacy version is no longer in use by any existing still supported
    342   operating system or distribution AND
    343 
    344 - there are modern versions of equivalent or better functionality offered and
    345   in common use
    346 
    347 ## weak algorithms required for functionality
    348 
    349 curl supports several algorithms that are considered weak, like DES and MD5.
    350 These algorithms are still not curl security vulnerabilities or security
    351 problems as they are only used when the users explicitly ask for their use by
    352 using the protocols or options that require the use of those algorithms.
    353 
    354 When servers upgrade to use secure alternatives, curl users should use those
    355 options/protocols.