Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Sometime crash with 'not enough values to unpack (expected 2, got 1)' for some CVE IDs #27

Open
hobgoblinsmaster opened this issue Jul 12, 2024 · 3 comments

Comments

@hobgoblinsmaster
Copy link

I'm using the version packaged by Debian: sploitscan/unstable,now 0.10.3-1
for some CVE IDs (not all), sploiscan crash (CVE-2024-36387 is OK for example)

❯ sploitscan CVE-2024-5535

███████╗██████╗ ██╗      ██████╗ ██╗████████╗███████╗ ██████╗ █████╗ ███╗   ██╗
██╔════╝██╔══██╗██║     ██╔═══██╗██║╚══██╔══╝██╔════╝██╔════╝██╔══██╗████╗  ██║
███████╗██████╔╝██║     ██║   ██║██║   ██║   ███████╗██║     ███████║██╔██╗ ██║
╚════██║██╔═══╝ ██║     ██║   ██║██║   ██║   ╚════██║██║     ██╔══██║██║╚██╗██║
███████║██║     ███████╗╚██████╔╝██║   ██║   ███████║╚██████╗██║  ██║██║ ╚████║
╚══════╝╚═╝     ╚══════╝ ╚═════╝ ╚═╝   ╚═╝   ╚══════╝ ╚═════╝╚═╝  ╚═╝╚═╝  ╚═══╝
v0.10.3 / Alexander Hagenah / @xaitax / ah@primepage.de

╔═══════════════════════╗
║ CVE ID: CVE-2024-5535 ║
╚═══════════════════════╝

┌───[ 🔍 Vulnerability information ]
|
├ Published:   2024-06-27
├ Base Score:  N/A (N/A)
├ Vector:      N/A
└ Description: 

[…]

┌───[ ♾️  Exploit Prediction Score (EPSS) ]
|
└ EPSS Score:  0.04% Probability of exploitation.

┌───[ 🛡️  CISA KEV Catalog ]
|
└ ❌ No data found.

Traceback (most recent call last):
  File "/usr/bin/sploitscan", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/usr/lib/python3/dist-packages/sploitscan/sploitscan.py", line 1067, in cli
    main(args.cve_ids, args.export, args.import_file, args.type, args.config, args.debug)
  File "/usr/lib/python3/dist-packages/sploitscan/sploitscan.py", line 984, in main
    public_exploits = fetch_and_display_public_exploits(cve_id)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3/dist-packages/sploitscan/sploitscan.py", line 880, in fetch_and_display_public_exploits
    display_public_exploits(github_data, vulncheck_data, exploitdb_data, packetstorm_data, nuclei_data, vulncheck_error)
  File "/usr/lib/python3/dist-packages/sploitscan/sploitscan.py", line 365, in display_public_exploits
    exploits, total = template(True)
    ^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 2, got 1)
@hobgoblinsmaster
Copy link
Author

Just tried something like this, that seems to work

--- /tmp/sploitscan.py.orig     2024-07-12 08:35:45.273308901 +0200
+++ /usr/lib/python3/dist-packages/sploitscan/sploitscan.py     2024-07-12 08:34:06.286219477 +0200
@@ -358,7 +358,7 @@
             entries.append(f"   └ {other_entries[-1]}")

         if not entries:
-            return ["└ ❌ No data found."]
+            return ["└ ❌ No data found."], 0

         return entries, total_exploits

@xaitax
Copy link
Owner

xaitax commented Jul 15, 2024

Thank you @hobgoblinsmaster - I see the issue. Thanks for the hint. Will address it in the next version.
Cheers.

@xaitax
Copy link
Owner

xaitax commented Jul 18, 2024

Hi @hobgoblinsmaster

I cannot reproduce it - can you check from the sources?

python .\sploitscan.py CVE-2024-5535

███████╗██████╗ ██╗      ██████╗ ██╗████████╗███████╗ ██████╗ █████╗ ███╗   ██╗
██╔════╝██╔══██╗██║     ██╔═══██╗██║╚══██╔══╝██╔════╝██╔════╝██╔══██╗████╗  ██║
███████╗██████╔╝██║     ██║   ██║██║   ██║   ███████╗██║     ███████║██╔██╗ ██║
╚════██║██╔═══╝ ██║     ██║   ██║██║   ██║   ╚════██║██║     ██╔══██║██║╚██╗██║
███████║██║     ███████╗╚██████╔╝██║   ██║   ███████║╚██████╗██║  ██║██║ ╚████║
╚══════╝╚═╝     ╚══════╝ ╚═════╝ ╚═╝   ╚═╝   ╚══════╝ ╚═════╝╚═╝  ╚═╝╚═╝  ╚═══╝
v0.10.3 / Alexander Hagenah / @xaitax / ah@primepage.de

╔═══════════════════════╗
║ CVE ID: CVE-2024-5535 ║
╚═══════════════════════╝

┌───[ 🔍 Vulnerability information ]
|
├ Published:   2024-06-27
├ Base Score:  N/A (N/A)
├ Vector:      N/A
└ Description: Issue summary: Calling the OpenSSL API function SSL_select_next_proto with an empty supported client
               protocols buffer may cause a crash or memory contents to be sent to the peer. Impact
               summary: A buffer overread can have a range of potential consequences such as
               unexpected application beahviour or a crash. In particular this issue could result in
               up to 255 bytes of arbitrary private data from memory being sent to the peer leading
               to a loss of confidentiality. However, only applications that directly call the
               SSL_select_next_proto function with a 0 length list of supported client protocols are
               affected by this issue. This would normally never be a valid scenario and is
               typically not under attacker control but may occur by accident in the case of a
               configuration or programming error in the calling application. The OpenSSL API
               function SSL_select_next_proto is typically used by TLS applications that support
               ALPN (Application Layer Protocol Negotiation) or NPN (Next Protocol Negotiation). NPN
               is older, was never standardised and is deprecated in favour of ALPN. We believe that
               ALPN is significantly more widely deployed than NPN. The SSL_select_next_proto
               function accepts a list of protocols from the server and a list of protocols from the
               client and returns the first protocol that appears in the server list that also
               appears in the client list. In the case of no overlap between the two lists it
               returns the first item in the client list. In either case it will signal whether an
               overlap between the two lists was found. In the case where SSL_select_next_proto is
               called with a zero length client list it fails to notice this condition and returns
               the memory immediately following the client list pointer (and reports that there was
               no overlap in the lists). This function is typically called from a server side
               application callback for ALPN or a client side application callback for NPN. In the
               case of ALPN the list of protocols supplied by the client is guaranteed by libssl to
               never be zero in length. The list of server protocols comes from the application and
               should never normally be expected to be of zero length. In this case if the
               SSL_select_next_proto function has been called as expected (with the list supplied by
               the client passed in the client/client_len parameters), then the application will not
               be vulnerable to this issue. If the application has accidentally been configured with
               a zero length server list, and has accidentally passed that zero length server list
               in the client/client_len parameters, and has additionally failed to correctly handle
               a "no overlap" response (which would normally result in a handshake failure in ALPN)
               then it will be vulnerable to this problem. In the case of NPN, the protocol permits
               the client to opportunistically select a protocol when there is no overlap. OpenSSL
               returns the first client protocol in the no overlap case in support of this. The list
               of client protocols comes from the application and should never normally be expected
               to be of zero length. However if the SSL_select_next_proto function is accidentally
               called with a client_len of 0 then an invalid memory pointer will be returned
               instead. If the application uses this output as the opportunistic protocol then the
               loss of confidentiality will occur. This issue has been assessed as Low severity
               because applications are most likely to be vulnerable if they are using NPN instead
               of ALPN - but NPN is not widely used. It also requires an application configuration
               or programming error. Finally, this issue would not typically be under attacker
               control making active exploitation unlikely. The FIPS modules in 3.3, 3.2, 3.1 and
               3.0 are not affected by this issue. Due to the low severity of this issue we are not
               issuing new releases of OpenSSL at this time. The fix will be included in the next
               releases when they become available.

┌───[ ♾️ Exploit Prediction Score (EPSS) ]
|
└ EPSS Score:  0.04% Probability of exploitation.

┌───[ 🛡️ CISA KEV Catalog ]
|
└ ❌ No data found.

┌───[ 💣 Public Exploits (Total: 0) ]
|
└ ❌ No data found.

┌───[ 🕵️ HackerOne Hacktivity ]
|
├ Rank:        6841
├ Reports:     0
└ Severity:    Unknown: 0 / None: 0 / Low: 0 / Medium: 0 / High: 0 / Critical: 0

┌───[ 🤖 AI-Powered Risk Assessment ]
|
|
| 1. Risk Assessment
| -------------------
| The vulnerability in question pertains to the OpenSSL API function SSL_select_next_proto, which
| can cause a crash or leakage of up to 255 bytes of memory content to a peer if called with an
| empty supported client protocols buffer. This can lead to unexpected application behavior,
| crashes, and potential loss of confidentiality. While such a scenario is unlikely due to the
| nature of valid use cases, it can occur due to configuration or programming errors. The likelihood
| of exploitation is low, as it requires specific erroneous configurations and cannot typically be
| manipulated by an attacker. Confidentiality is at risk since private data could be leaked, but
| integrity and availability are less impacted as the primary threat is data exposure rather than
| modification or denial of service. The overall impact is assessed as low due to the requirement of
| using NPN over ALPN, the latter being more widely deployed and not vulnerable under typical
| conditions.
|
| 2. Potential Attack Scenarios
| ------------------------------
| One potential attack scenario involves a misconfigured server using NPN instead of ALPN. An
| application mistakenly configured with a zero-length list of supported client protocols calls
| SSL_select_next_proto. An attacker operating a malicious server engages in a TLS handshake and the
| function sends back the adjacent memory contents instead of valid protocol data. The attacker can
| use this opportunity to observe potentially sensitive information from the server's memory. Given
| its low likelihood and complex setup involving specific programming errors, active exploitation
| remains unlikely under normal conditions.
|
| 3. Mitigation Recommendations
| ------------------------------
| Immediate mitigation can be achieved by ensuring applications do not call SSL_select_next_proto
| with an empty protocol list. Development teams should audit their applications for any improper
| handling of SSL protocol lists and correct any configuration errors. Where feasible, upgrading
| OpenSSL to versions 3.3.2, 3.2.3, 3.1.7, 3.0.15, 1.1.1za, or 1.0.2zk once they are available will
| resolve the issue. Additionally, organizations should switch from NPN to ALPN, aligning with
| current best practices and reducing vulnerability exposure. More information on updates and
| patches can be accessed through the following links provided in the advisory:
| https://www.openssl.org/news/secadv/20240627.txt,
| https://github.com/openssl/openssl/commit/e86ac436f0bd54d4517745483e2315650fae7b2c.
|
| 4. Executive Summary
| ---------------------
| A recently identified vulnerability in the OpenSSL API function SSL_select_next_proto could
| potentially expose up to 255 bytes of private memory data if called with an empty list of
| supported client protocols. This scenario, while deemed unlikely due to its dependence on
| configuration or programming errors and the use of the deprecated NPN protocol, poses a risk
| primarily to confidentiality. Mitigation strategies include auditing and correcting application
| configurations, prioritizing the use of ALPN over NPN, and planning for eventual updates to newer
| OpenSSL versions that address the issue. This vulnerability underlines the importance of
| maintaining up-to-date cryptographic libraries and adhering to modern protocol standards. Non-
| technical stakeholders should understand that while the risk is currently assessed as low,
| proactive measures are essential to safeguard sensitive data and maintain system integrity.
|
└────────────────────────────────────────

┌───[ ⚠️ Patching Priority Rating ]
|
└ Priority:     D

┌───[ 📚 Further References ]
|
├ https://www.openssl.org/news/secadv/20240627.txt
├ https://github.com/openssl/openssl/commit/e86ac436f0bd54d4517745483e2315650fae7b2c
├ https://github.com/openssl/openssl/commit/99fb785a5f85315b95288921a321a935ea29a51e
├ https://github.com/openssl/openssl/commit/4ada436a1946cbb24db5ab4ca082b69c1bc10f37
├ https://github.com/openssl/openssl/commit/cf6f91f6121f4db167405db2f0de410a456f260c
├ https://github.openssl.org/openssl/extended-releases/commit/b78ec0824da857223486660177d3b1f255c65d87
├ https://github.openssl.org/openssl/extended-releases/commit/9947251413065a05189a63c9b7a6c1d4e224c21c
├ http://www.openwall.com/lists/oss-security/2024/06/27/1
├ http://www.openwall.com/lists/oss-security/2024/06/28/4
└ https://security.netapp.com/advisory/ntap-20240712-0005/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants