#28401: django doesn't work with FIPS kernels
-----------------------------------------+---------------------------
               Reporter:  Andrew         |          Owner:  nobody
                   Type:  Bug            |         Status:  new
              Component:  Uncategorized  |        Version:  master
               Severity:  Normal         |       Keywords:  FIPS, md5
           Triage Stage:  Unreviewed     |      Has patch:  0
    Needs documentation:  0              |    Needs tests:  0
Patch needs improvement:  0              |  Easy pickings:  0
                  UI/UX:  0              |
-----------------------------------------+---------------------------
 Specifically, every use of hashlib.md5() is an issue for FIPS kernels
 which lack openssl support for md5. However, at least on RHEL and Centos,
 hashlib.new() supports the usedforsecurity=False flag that allows you to
 bypass the FIPS prohibition on md5. Many of the cases in which the md5
 function is used qualify as non-security uses since it is used to mainly
 truncate values. Of course the md5 auth backends would constitute a
 security usages and should not include the usedforsecurity=False and thus
 should fail on FIPS systems.

 Therefore i propose that we add the usedforsecurity=False flag where
 warranted and handling in case some versions of python do not support this
 flag. (I tested python 2.7 on OSX and it errors when the usedforsecurity
 flag is set). If everyone this this is a good plan I will go ahead and
 make a PR.

 list of all useages of hashlib.md5
 
[https://github.com/django/django/search?q=hashlib.md5&type=Code&utf8=%E2%9C%93]

 django-developers thread
 [https://groups.google.com/forum/#!msg/django-
 developers/dlUIPzQgnpM/Mtl7CQbPAQAJ]
 django-users thread
 [https://groups.google.com/forum/#!topic/django-users/THJdhaKo-ng]

 Example stack trace:

 {{{
 Operations to perform:
   Apply all migrations: admin, auth, contenttypes, dashboard,
 kombu_transport_django, sessions
 Running migrations:
   Applying contenttypes.0001_initial...Traceback (most recent call last):
   File "manage.py", line 10, in <module>
     execute_from_command_line(sys.argv)
   File "/usr/lib64/python2.7/site-
 packages/django/core/management/__init__.py", line 367, in
 execute_from_command_line
     utility.execute()
   File "/usr/lib64/python2.7/site-
 packages/django/core/management/__init__.py", line 359, in execute
     self.fetch_command(subcommand).run_from_argv(self.argv)
   File "/usr/lib64/python2.7/site-
 packages/django/core/management/base.py", line 294, in run_from_argv
     self.execute(*args, **cmd_options)
   File "/usr/lib64/python2.7/site-
 packages/django/core/management/base.py", line 345, in execute
     output = self.handle(*args, **options)
   File "/usr/lib64/python2.7/site-
 packages/django/core/management/commands/migrate.py", line 204, in handle
     fake_initial=fake_initial,
   File "/usr/lib64/python2.7/site-
 packages/django/db/migrations/executor.py", line 115, in migrate
     state = self._migrate_all_forwards(state, plan, full_plan, fake=fake,
 fake_initial=fake_initial)
   File "/usr/lib64/python2.7/site-
 packages/django/db/migrations/executor.py", line 145, in
 _migrate_all_forwards
     state = self.apply_migration(state, migration, fake=fake,
 fake_initial=fake_initial)
   File "/usr/lib64/python2.7/site-
 packages/django/db/migrations/executor.py", line 244, in apply_migration
     state = migration.apply(state, schema_editor)
   File "/usr/lib64/python2.7/site-
 packages/django/db/migrations/migration.py", line 129, in apply
     operation.database_forwards(self.app_label, schema_editor, old_state,
 project_state)
   File "/usr/lib64/python2.7/site-
 packages/django/db/migrations/operations/models.py", line 532, in
 database_forwards
     getattr(new_model._meta, self.option_name, set()),
   File "/usr/lib64/python2.7/site-
 packages/django/db/backends/base/schema.py", line 333, in
 alter_unique_together
     self.execute(self._create_unique_sql(model, columns))
   File "/usr/lib64/python2.7/site-
 packages/django/db/backends/base/schema.py", line 913, in
 _create_unique_sql
     "name": self.quote_name(self._create_index_name(model, columns,
 suffix="_uniq")),
   File "/usr/lib64/python2.7/site-
 packages/django/db/backends/base/schema.py", line 819, in
 _create_index_name
     index_unique_name = '_%s' % self._digest(table_name, *column_names)
   File "/usr/lib64/python2.7/site-
 packages/django/db/backends/base/schema.py", line 123, in _digest
     h = hashlib.md5()
 ValueError: error:060800A3:digital envelope
 routines:EVP_DigestInit_ex:disabled for fips
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/28401>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/049.8a56263c25fe91fa0a5a3779941cb508%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to