Title: Fallback md5 is used, when trying hard to only use OpenSSL · Issue #118224 · python/cpython · GitHub
Open Graph Title: Fallback md5 is used, when trying hard to only use OpenSSL · Issue #118224 · python/cpython
X Title: Fallback md5 is used, when trying hard to only use OpenSSL · Issue #118224 · python/cpython
Description: Bug report Bug description: When OpenSSL is configured in FIPS mode recommended config is used to only load "base + fips" providers without the default provider CPython is compiled with --with-builtin-hashlib-hashes=blake2 to exclude fal...
Open Graph Description: Bug report Bug description: When OpenSSL is configured in FIPS mode recommended config is used to only load "base + fips" providers without the default provider CPython is compiled with --with-buil...
X Description: Bug report Bug description: When OpenSSL is configured in FIPS mode recommended config is used to only load "base + fips" providers without the default provider CPython is compiled with -...
Opengraph URL: https://github.com/python/cpython/issues/118224
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Fallback md5 is used, when trying hard to only use OpenSSL","articleBody":"# Bug report\r\n\r\n### Bug description:\r\n\r\nWhen\r\n* OpenSSL is configured in FIPS mode\r\n* recommended config is used to only load \"base + fips\" providers\r\n* without the default provider\r\n* CPython is compiled with `--with-builtin-hashlib-hashes=blake2` to exclude fallback implementation of MD5\r\n\r\nupon importing hashlib fails to create MD5 construct.\r\n\r\n```python\r\n# python3.10 -c 'import hashlib'\r\nERROR:root:code for hash md5 was not found.\r\nTraceback (most recent call last):\r\n File \"/usr/lib/python3.10/hashlib.py\", line 137, in __get_openssl_constructor\r\n f(usedforsecurity=False)\r\nValueError: [digital envelope routines] unsupported\r\n\r\nDuring handling of the above exception, another exception occurred:\r\n\r\nTraceback (most recent call last):\r\n File \"/usr/lib/python3.10/hashlib.py\", line 261, in \u003cmodule\u003e\r\n globals()[__func_name] = __get_hash(__func_name)\r\n File \"/usr/lib/python3.10/hashlib.py\", line 141, in __get_openssl_constructor\r\n return __get_builtin_constructor(name)\r\n File \"/usr/lib/python3.10/hashlib.py\", line 123, in __get_builtin_constructor\r\n raise ValueError('unsupported hash type ' + name)\r\nValueError: unsupported hash type md5\r\n```\r\n\r\nReference implementation is upstream openssl 3.3.0, with enable-fips, fipsinstall completed and openssl.cnf set to\r\n```\r\n# cat /etc/ssl/openssl.cnf \r\nconfig_diagnostics = 1\r\nopenssl_conf = openssl_init\r\n\r\n.include /etc/ssl/fipsmodule.cnf\r\n\r\n[openssl_init]\r\nproviders = provider_sect\r\nalg_section = algorithm_sect\r\n\r\n[provider_sect]\r\nfips = fips_sect\r\nbase = base_sect\r\n\r\n[base_sect]\r\nactivate = 1\r\n\r\n[algorithm_sect]\r\ndefault_properties = fips=yes\r\n```\r\n\r\nIn essence, things work well only when \"default + fips\" providers are loaded, as then MD5 functions in OpenSSL are detected as available and are used at runtime and correctly get blocked.\r\n\r\nWhen only \"base + fips\" providers are loaded, ValueError is raised by OpenSSL constructor, and instead fallback implementation used from _md5 module if it was compiled in.\r\n\r\nIt seems like the above configuration was not tested, however it can be made to work. CPython should try to load the \"default\" OpenSSL provider, to guarantee access to non-fips hashes.\r\n\r\n### Security concerns\r\n\r\nThis is FedRAMP/FIPS compliance by-pass. This issue may allow using md5 without specifying \"usedforsecurity=False\" on systems otherwise configured to be in FIPS-mode only. And is the primary reason why documentation mentions that certain distributors of python remove md5 module altogether.\r\n\r\n### CPython versions tested on:\r\n\r\n3.10, 3.11, 3.12\r\n\r\n### Operating systems tested on:\r\n\r\nLinux\r\n\r\n\u003c!-- gh-linked-prs --\u003e\r\n### Linked PRs\r\n* gh-118236\r\n* gh-118238\r\n* gh-118239\r\n* gh-118240\r\n* gh-118264\r\n* gh-127300\n\u003c!-- /gh-linked-prs --\u003e\r\n","author":{"url":"https://github.com/xnox","@type":"Person","name":"xnox"},"datePublished":"2024-04-24T12:49:43.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":24},"url":"https://github.com/118224/cpython/issues/118224"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:167ebb2c-78b3-e3d6-5e48-f03f9b001572 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | BC26:EFB79:29E914:3854D1:6969A9F4 |
| html-safe-nonce | 026ad6b116e925b3aa8246a5d546a28d4345774918f44d357577c4777e71f2d7 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCQzI2OkVGQjc5OjI5RTkxNDozODU0RDE6Njk2OUE5RjQiLCJ2aXNpdG9yX2lkIjoiNzIwMTUwNzYyNDE2MTQ4NzM0OCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 7494b7d7cab04312e12ac0df52c6d927efde4b39859a35178ccdfbfa5a441640 |
| hovercard-subject-tag | issue:2261222634 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/118224/issue_layout |
| twitter:image | https://opengraph.githubassets.com/95d92ab9310804f84085f23169ab74fec59c5f7d1695fd61f7a1eb58107a49cb/python/cpython/issues/118224 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/95d92ab9310804f84085f23169ab74fec59c5f7d1695fd61f7a1eb58107a49cb/python/cpython/issues/118224 |
| og:image:alt | Bug report Bug description: When OpenSSL is configured in FIPS mode recommended config is used to only load "base + fips" providers without the default provider CPython is compiled with --with-buil... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | xnox |
| hostname | github.com |
| expected-hostname | github.com |
| None | 24c4c97a2d520cb286b35e1a4c22d7a4df3c26a2fa28dd7cdf0e65db327b4de7 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 124667f43168afb6c9c03b7c02eb5b1d2e1be3d9 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width