On 5/10/17, Madhusudhana R <madhusudhan...@in.abb.com> wrote:
> Hi Lee,
>
> Thanks for the response.
>
> If SNMPERR_USM_AUTHENTICATIONFAILURE is used the error turns out to be
> "authProtocol or authPassword may be wrong" on ManageEngine tool.
>
> As I mentioned before, SNMPERR_USM_GENERICERROR we get "Timesync Failure".
> So this error can get a thought that agent is not running. (apologies if my
> thinking is so bad!!)
>
> Please suggest which return status is more appropriate?
> Also with either of them, will it affect the system architecture in any
> way?

What are you trying to accomplish here?  Your original msg said
>>   Regarding a security related finding...

Somebody did a security audit & you're stuck with addressing the
finding?  I've had the same type of thing & yes, according to the
security people, allowing attackers to figure out valid userids is A
Bad Thing.  I see a couple of possible solutions:

You've got the source code, so apply your change, deploy & you're done.


It's not looking like the admins are in favor of the change you
submitted, so maybe try something different?  Like add a configuration
option to disable specific USM error codes & add an #ifdef block in
snmp_api.h to define whatever USM error codes to all be the same
value.  eg something like
#ifdef noSpecificUSMErrorCodes
#define SNMPERR_USM_UNKNOWNSECURITYNAME         (-46)
#define SNMPERR_USM_UNSUPPORTEDSECURITYLEVEL    (-46)
#define SNMPERR_USM_AUTHENTICATIONFAILURE       (-46)
#else
#define SNMPERR_USM_UNKNOWNSECURITYNAME         (-43)
#define SNMPERR_USM_UNSUPPORTEDSECURITYLEVEL    (-44)
#define SNMPERR_USM_AUTHENTICATIONFAILURE       (-46)
#endif

So the people that want specific error codes can have them & the
people that want just a generic auth fail can have that.


my personal favorite is to allow snmp only from trusted subnets/hosts
- eg. iptables, firewalls, router acls, etc.

Regards,
Lee

>
> Thanks.
> Madhu
>
> -----Original Message-----
> From: Lee [mailto:ler...@gmail.com]
> Sent: Wednesday, May 10, 2017 5:37 PM
> To: Ulrich Windl <ulrich.wi...@rz.uni-regensburg.de>
> Cc: net-snmp-coders@lists.sourceforge.net
> Subject: Re: Username existence disclosure from Agent
>
> On 5/8/17, Ulrich Windl <ulrich.wi...@rz.uni-regensburg.de> wrote:
>>>>> Madhusudhana R <madhusudhan...@in.abb.com> schrieb am 05.05.2017 um
>>>>> 11:16 in
>> Nachricht
>> <db4pr06mb41239e1a802b6a266ffcb8ab0...@db4pr06mb412.eurprd06.prod.outlook.com>:
>>> Hi Coders,
>>>
>>> Regarding a security related finding...
>>>
>>> When incorrect username is provided from manager (ManageEngine tool),
>>> the
>>>
>>> manager throws "Discovery failed for username" which could be used by
>>> an attacker to know whether user exists or not.
>>>
>>> I did a workaround and came up with fix.
>>>
>>> Please let me know if this fix is appropriate or not.
>>>
>>> In file snmpusm.c, in function usm_process_in_msg() and below code
>>> snippet, I changed the return value from
>>> SNMPERR_USM_UNKNOWNSECURITYNAME to SNMPERR_USM_GENERICERROR with
>>> which the error in Manager changed to "Timesync failure" for
>>> incorrect username.
>>
>> IMHO. The gain of guessing a user name is not a significant problem as
>> the password is what really protects the account. In any case an error
>> like "Timesync failure" for a bad user name is cleasrly to be rejected.
>
> Probably not a significant problem, but still, you're not supposed to allow
> enumerating userids.  eg.
> https://www.owasp.org/index.php/Authentication_Cheat_Sheet#Authentication_and_Error_Messages
>   Correct Response Example
>      "Login failed; Invalid userID or password"
>   The correct response does not indicate if the user ID or password is the
> incorrect parameter and hence inferring a valid user ID.
>
> Would SNMPERR_USM_AUTHENTICATIONFAILURE be the appropriate status to return
> for an invalid userid or password?
>
> Regards,
> Lee
>
>
>>
>> Ulrich
>>
>>
>>>
>>>     /*
>>>      * Locate the User record.
>>>      * If the user/engine ID is unknown, report this as an error.
>>>      */
>>>     if ((user = usm_get_user_from_list(secEngineID, *secEngineIDLen,
>>>                                        secName, userList,
>>>                                        (((sess &&
>>> sess->isAuthoritative ==
>>>                                           SNMP_SESS_AUTHORITATIVE) ||
>>>                                          (!sess)) ? 0 : 1)))
>>>         == NULL) {
>>>         DEBUGMSGTL(("usm", "Unknown User(%s)\n", secName));
>>>         snmp_increment_statistic(STAT_USMSTATSUNKNOWNUSERNAMES);
>>>              return SNMPERR_USM_GENERICERROR;
>>>     }
>>>
>>> Thanks & Regards,
>>> Madhu
>>
>>
>>
>>
>>
>> ----------------------------------------------------------------------
>> -------- Check out the vibrant tech community on one of the world's
>> most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
>> _______________________________________________
>> Net-snmp-coders mailing list
>> Net-snmp-coders@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/net-snmp-coders
>>
>
> ------------------------------------------------------------------------------
> Check out the vibrant tech community on one of the world's most engaging
> tech sites, Slashdot.org! http://sdm.link/slashdot
> _______________________________________________
> Net-snmp-coders mailing list
> Net-snmp-coders@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/net-snmp-coders
>

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Net-snmp-coders mailing list
Net-snmp-coders@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to