logo

Database

Elixir Ecto Weak Password Encoding Base64

Description

This detector identifies Elixir code that uses weak Base64 encoding for password fields in Ecto schemas. Base64 encoding is not a secure hashing mechanism and passwords encoded this way can be easily decoded, exposing user credentials. This vulnerability poses a significant security risk as it fails to properly protect sensitive authentication data.

Weakness:

020 - Non-encrypted confidential information

Category: Information Collection

Detection Strategy

    Scans Elixir source code files for Ecto schema definitions and database repository operations

    Identifies password-related fields in schemas or database operations that use Base64 encoding functions

    Flags any password field that is encoded with Base64 instead of using proper cryptographic hashing algorithms like bcrypt or argon2

    Reports the vulnerability when Base64 encoding is detected on password fields in repository sinks (database operations)

Vulnerable code example

defmodule UserAuth do
  import Ecto.Changeset
  alias MyApp.Repo

  def register_user(user, password) do
    user
    |> change()
    |> put_change(:password, Base.encode64(password)) # VULNERABLE: Base64 is reversible, not a secure hash...

✅ Secure code example

defmodule UserAuth do
  import Ecto.Changeset
  alias MyApp.Repo

  def register_user(user, password) do
    user
    |> change()
    |> put_change(:password, Bcrypt.hash_pwd_salt(password)) # SAFE: Bcrypt provides one-way cryptographic hashing...