Skip to content

imaplib — cleartext

Cleartext Transmission of Sensitive Information in the imaplib Module

The Python module imaplib provides a number of functions for accessing IMAP servers. However, the default behavior of the module does not provide utilize secure connections. This means that data transmitted over the network, including passwords, is sent in cleartext. This makes it possible for attackers to intercept and read this data.

The Python module imaplib should only in a secure mannner to protect sensitive data when accessing IMAP servers.

Example

imaplib_imap4_login.py
import getpass
import imaplib


M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    print('Message %s\n%s\n' % (num, data[0][1]))
M.close()
M.logout()
Example Output
> precli tests/unit/rules/python/stdlib/imaplib/examples/imaplib_imap4_login.py
⛔️ Error on line 6 in tests/unit/rules/python/stdlib/imaplib/examples/imaplib_imap4_login.py
PY008: Cleartext Transmission of Sensitive Information
The 'imaplib.IMAP4.login' function will transmit authentication information such as a user, password in cleartext.

Remediation

If the IMAP protocol must be used and sensitive data will be transferred, it is recommended to secure the connection using IMAP4_SSL class. Alternatively, the starttls function can be used to enter a secure session.

imaplib_imap4_login.py
import getpass
import imaplib


M = imaplib.IMAP4_SSL()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(RFC822)')
    print('Message %s\n%s\n' % (num, data[0][1]))
M.close()
M.logout()

Default Configuration

enabled = true
level = "error"

See also

New in version 0.1.9