Dolibarr's Members REST API performs the expected permission check before returning data, but its response cleaning does not remove all credential fields. An authenticated caller with member-read permission, represented by adherent.lire, can query an individual member or member-list endpoint and receive a bcrypt password verifier.
The vulnerable flow is the Members API _cleanObjectDatas() implementation in htdocs/adherents/class/api_members.class.php, which relies on the shared cleaner in htdocs/api/class/api.class.php. The shared cleaner removes pass and pass_indatabase but leaves pass_indatabase_crypted, pass_crypted, and pass_temp; pass_indatabase_crypted is the live verifier used for login checks. The Members API does not add a second redaction step before serializing the response.
Both individual-member and member-list routes use the same cleaning logic, so one legitimate read permission can expose verifiers for multiple members. This is insufficient credential protection after an authorized read, not a missing authentication check for anonymous callers. The available evidence does not establish how custom extensions or alternate serializers behave outside the documented request paths.