On Tue, Apr 28, 2020 at 01:46:17AM +0200, Ingo Schwarze wrote:
> Hi Alexei,
> 
> Alexei Malinin wrote on Tue, Apr 28, 2020 at 01:05:23AM +0300:
> 
> > I ported akpop3d to NetBSD and found the Subject.
> > GCC warning was the following:
> > authenticate.c: In function 'is_user_allowed':
> > authenticate.c:110:11: warning: switch condition has boolean value
> > [-Wswitch-bool]
> 
> This is a textbook example of how you must *not* react to a compiler
> warning.  Do not apply random patches just to shut up the compiler,
> without understanding what the code does or what your patches change.
> Such reckless behaviour is exactly how Debian produced the spectacular
> security vulnerability in their port of OpenSSH several years ago.
> 
> 
> From pure code inspection, i conclude that what you report is very
> likely a security vulnerability.
> 
> 
> What the code currently does is this:
> 
>  * If the file /etc/pop3.deny does not exist or an error occurs
>    reading from it, all users are denied access.
>  * If the file /etc/pop3.deny exists and can be read,
>    users listed in the file are denied access, but
>    *all* users *not* listed in the file are granted access.
>  * In either case, the file /etc/pop3.allow is totally ignored.
>    It may or may not exist, and if it does, the contents are
>    read, but whatever is in there makes no difference whatsoever.
>  * Note that the confusing condition
>      if ((allow == 0 && deny == 0) || (allow == 1 && deny == 0)) {
>    a few lines below is equivalent to just
>      if (deny == 0) {
>    and consequently, the assignments to the variable "allow" are
>    effectively dead stores.
> 
> From the akpop3d(8) manual page, it remains totally unclear what
> the desired behaviour is supposed to be, but the above cannot
> possibly be right.  It looks as if it was never tested at all.
> 
> 
> The only effect of your change is as follows.  With your change,
> we get this in addition to the above:
> 
>  * If the file /etc/pop3.allow does not exist or an error occurs
>    reading from it, all users are denied access.
>  * But if it can be read, its contents are still totally
>    ignored.
> 
> Quite obviously, that cannot possibly be correct behaviour either,
> so if there is a vulnerability (hard to say given that desired
> behaviour is unspecified), it seems unlikely that your change fully
> fixes it.
> 
> 
> Judging from the website, this program has been unmaintained for
> more than 15 years.
> 
> I think we should delete the port completely, giving something like
> "sloppily coded, sloppily documented, severely buggy and likely
> vulnerable abandonware" as the reason for deletion.

It has my vote.

-- 
Antoine

Reply via email to