Lỗi nằm trong luồng xử lý SASL bind của 389-ds-base, thuộc nhóm CWE-287, Improper Authentication. Hàm ids_sasl_canon_user() ghi DN đã phân giải vào thuộc tính phụ của Cyrus SASL trong mỗi lần canonicalization, kể cả khi lần xác thực thất bại. Một lần trao đổi PLAIN một bước bị lỗi không làm tạo lại SASL context; lần bind SASL thành công tiếp theo trên cùng connection đọc thuộc tính bằng prop_getnames() rồi tin tưởng vô điều kiện giá trị đầu tiên dnval[0].values[0], không kiểm tra mechanism, độ mới của giá trị hoặc sự khớp với danh tính vừa xác thực.
Luồng ảnh hưởng đã được xác nhận ở mức triển khai như sau:
- Một SASL PLAIN bind thất bại có thể để lại DN
cn=Directory Manager trong thuộc tính phụ.
- Một bind SASL thành công, không liên quan, trên cùng connection có thể khiến server lấy lại DN cũ, kể cả khi mechanism thứ hai là SASL ANONYMOUS.
- Server sau đó cài đặt danh tính cũ thay cho danh tính thực sự vừa được xác thực và cấp quyền Directory Manager.
Root cause được xác định trong ldap/servers/slapd/saslbind.c, tại ids_sasl_canon_user() và ids_sasl_check_bind(). Chi tiết về bản vá nội bộ, chẳng hạn cách server làm mới hoặc xóa thuộc tính phụ, không được nêu trong các bằng chứng đã trả về.