Re: cygsshd fails due to bad ownership or modes of /cygdrive/c/Users

2024-02-06 Thread marco atzeri via Cygwin
On Wed, Feb 7, 2024 at 3:26 AM Frank-Ulrich Sommer via Cygwin
 wrote:
> On 06.02.2024 22:22, Brian Inglis via Cygwin wrote:
> > On 2024-02-05 18:36, Eliot Moss via Cygwin wrote:
> >> On 2/5/2024 8:28 PM, Frank-Ulrich Sommer via Cygwin wrote:
> >>> On 05.02.2024 00:53, Frank-Ulrich Sommer via Cygwin wrote:
>  I'm trying to run cygsshd on my PC with Windows 11 and connect from a 
>  linux machine. I have added the public key to 
>  /cygdrive/c/Users/xxx/.ssh/authorized_keys and created a symbolic link 
>  from  /cygdrive/c/Users/xxx/.ssh to /home/xxx/.ssh. As usual I checked 
>  the access rights and mode of the .ssh directory (700 and belongs to 
>  user xxx) and the authorized_keys file (600 and also belongs to user 
>  xxx) and also of the home directory (had to change ownership).

> The problem seems to be that OpenSSH does not even arrive at checking the 
> home diretory or the .ssh directory. It starts checking every directory in 
> the path and fails already at "/cygdrive/c/Users". Now that I know how to get 
> the sources I added debug output to the error message. OpenSSH sees this 
> directory as belonging to user with UID 18 and it has mode 4750. Mode ist 
> checked not to contain 0022 which is fine here. Then it checks that the owner 
> is the correct system user and the only criteria is that the UID must be 
> zero. Only for AIX and HPUX the user "bin" with UID 2 is also accepted. So 
> this check fails and OpenSSH assumes that the directory does not belong to 
> the correct privileged system user.
>
> I think the only way to fix this with the current OpenSSH is disabling strict 
> mode, but normally I'm quite reluctant to do something like that.2
>

what is the issue on using /home/USER/.ssh folder ?

I prefer to leave the Cygwin Home and the Windows Home well separated
to avoid this ACL collision

 $ set | grep -i ^home
HOME=/home/matzeri
HOMEDRIVE=C:
HOMEPATH='\Users\matzeri'

-- 
Problem reports:  https://cygwin.com/problems.html
FAQ:  https://cygwin.com/faq/
Documentation:https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple


Re: MULTIPLE VULNERABILITY REPORT: Multiple DLL Hijacking Vulnerability in CygWin setup-x86_64.exe

2024-02-06 Thread Brian Inglis via Cygwin

On 2024-02-06 15:10, Kaz Kylheku via Cygwin wrote:

On 2024-02-04 21:22, Suman Chakraborty via Cygwin wrote:

1. Executive Summary:

The vulnerability pertains to not finding
the profapi.dll, CFGMGR32.dll, edputil.dll,  urlmon.dll, SspiCli.dll,
Wldp.dll, MPR.dll, ServicingCommon.dll, TextShaping.dll, CRYPTBASE.DLL,
PROPSYS.dll and insecure loading of dynamic link libraries (DLLs),
specifically profapi.dll. If exploited, this vulnerability could allow an
attacker to execute arbitrary code on a victim's machine, potentially
leading to data breaches, system compromise, and other malicious activities.


By what means is setup.exe probing these DLLs?

I don't see any references to profapi.dll in its source tree
(git grep -i profapi turns up nothing).

If these DLL's being missing doesn't stop the program from running,
doesn't that mean it's just probing for them with LoadLibrary or
LoadLibraryEx explicitly, and then handling the failure gracefully?

Setup itself doesn't use LoadLibrary or LoadLibraryEx.

The MinGW toolchain must be introducing that somehow?

It is curious.


Could be any one of the proprietary DLLs pulled into Cygwin Setup:

$ upx -dqqqot ~/mirror/x86_64/setup-x86_64.exe
$ grep -ao '%%%\ssetup-version\s[0-9]\+\.[0-9]\+' t
%%% setup-version 2.929
$ cygcheck ./t
...\t
  C:\WINDOWS\system32\KERNEL32.DLL
C:\WINDOWS\system32\ntdll.dll
C:\WINDOWS\system32\KERNELBASE.dll
  C:\WINDOWS\system32\ADVAPI32.dll
C:\WINDOWS\system32\msvcrt.dll
C:\WINDOWS\system32\SECHOST.dll
  C:\WINDOWS\system32\RPCRT4.dll
  C:\WINDOWS\system32\COMCTL32.dll
C:\WINDOWS\system32\GDI32.dll
  C:\WINDOWS\system32\win32u.dll
C:\WINDOWS\system32\USER32.dll
  C:\WINDOWS\system32\ole32.dll
C:\WINDOWS\system32\combase.dll
  C:\WINDOWS\system32\PSAPI.DLL
  C:\WINDOWS\system32\SHELL32.dll
C:\WINDOWS\system32\msvcp_win.dll
  C:\WINDOWS\system32\SHLWAPI.dll
  C:\WINDOWS\system32\WININET.dll
  C:\WINDOWS\system32\WS2_32.dll

OP:
Which version and date of setup-x86_64.exe are you checking?
Do you have any A/V or EPP installed on your system which could be injecting 
these interlopers into the call chain?


--
Take care. Thanks, Brian Inglis  Calgary, Alberta, Canada

La perfection est atteinte   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer but when there is no more to cut
-- Antoine de Saint-Exupéry


--
Problem reports:  https://cygwin.com/problems.html
FAQ:  https://cygwin.com/faq/
Documentation:https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple


Re: cygsshd fails due to bad ownership or modes of /cygdrive/c/Users

2024-02-06 Thread Frank-Ulrich Sommer via Cygwin



On 06.02.2024 22:22, Brian Inglis via Cygwin wrote:

On 2024-02-05 18:36, Eliot Moss via Cygwin wrote:

On 2/5/2024 8:28 PM, Frank-Ulrich Sommer via Cygwin wrote:

On 05.02.2024 00:53, Frank-Ulrich Sommer via Cygwin wrote:

I'm trying to run cygsshd on my PC with Windows 11 and connect from a linux 
machine. I have added the public key to 
/cygdrive/c/Users/xxx/.ssh/authorized_keys and created a symbolic link from  
/cygdrive/c/Users/xxx/.ssh to /home/xxx/.ssh. As usual I checked the access 
rights and mode of the .ssh directory (700 and belongs to user xxx) and the 
authorized_keys file (600 and also belongs to user xxx) and also of the home 
directory (had to change ownership).


Change the symlink from Cygwin home to your home, as symlinks have a+rwx perms, 
so you can not use one for .ssh:

$ ln -sv `cygpath -aU "C:/Users/$USER"` /home/


Currently I'm reluctant to do this as my current cygwin home directory looks quite 
"clean" and does not contain hundreds of Windows files and subdirectories. I 
just added the link as the .ssh directory was automatically created as 
/cygdrive/c/Users/fus/.ssh and I wanted to have an easier access and avoid having two 
different .ssh directories which showed to be quite risky in the past.

Now I get the following strange messages:
[...]
Feb  5 00:35:50 X sshd: PID 2798: debug1: temporarily_use_uid: 
197609/197121 (e=18/18)
Feb  5 00:35:50 X sshd: PID 2798: debug1: trying public key file 
/home/xxx/.ssh/authorized_keys
Feb  5 00:35:50 X sshd: PID 2798: debug1: fd 5 clearing O_NONBLOCK
Feb  5 00:35:50 X sshd: PID 2798: Authentication refused: bad ownership or 
modes for directory /cygdrive/c/Users
Feb  5 00:35:50 X sshd: PID 2798: debug1: restore_uid: 18/18
[...]
Why is cygsshd complaining about the Windows "Users" directory and not about 
the directory of user xxx (/cygdrive/c/Users/xxx)? And how can I solve this?



Looking at the OpenSSH source code (on Github, not from Cygwin) I found a function 
"safe_path" that checks that the ownership and access modes for all path components are 
correct.  This relies on "platform_sys_dir_uid" which checks if a UID may own a system 
directory. The code checks for UID zero and might also accept an OS specific second value 
(PLATFORM_SYS_DIR_UID) but for Cygwin this seems not to be set. But I don't know where to find the 
source code for the exact version that is used in Cygwin and I'm unsure about build settings.


Run Cygwin setup and select package openssh Source checkbox to download the 
source package, or go to your Cygwin upstream mirror and download the source 
tarball shown in setup.ini prefixed with your nearest Cygwin mirror site e.g.

https://ftp.fau.de/cygwin/x86_64/release/openssh/openssh-9.6p1-1-src.tar.xz

Build settings are in the Cygwin package build control script definitions file 
openssh.cygport in the source tarball or build repo:

https://cygwin.com/cgit/cygwin-packages/openssh/tree/openssh.cygport

...
--disable-strip
   --with-kerberos5=/usr
   --libexecdir=/usr/sbin
   --with-xauth=/usr/bin/xauth
   --with-libedit
   --with-security-key-builtin


Thanks for that tip, I found and installed it and succeeded to build it with 
additional info in the error message (see below).

A comment defines this a safe path as follows:
"This is defined as all components of the path to the file must be owned by either 
the owner of the file or root and no directories must be group or world writable."



The "Users" directory is owned by "SYSTEM" (numeric: 18 according to stat) and 
only writable by Administrators and SYSTEM. The mode cygwin shows for /cygdrive/c/Users is 0750 
which should be OK.



So my question is: are "Administrators" and "SYSTEM" different users and does 
cygsshd accept SYSTEM (numeric 18) as a valid user who may own system directories? If the numeric 
ID is really 18 I can't see how this check can succeed but I'm not sure the code used in Cygwin is 
the same.


$ id SYSTEM
uid=18(SYSTEM) gid=18(SYSTEM) groups=544(Administrators),18(SYSTEM)


OK, I get the same on my system which seems to be Windows standard.

Administrators and SYSTEM are not the same.  And neither is exactly equivalent
to the concept of root in POSIX.  SYSTEM (in my experience) is used for things
like backup tools that needs access to almost every file. Administrators is for
system administration.  I don't have deep knowledge of all of this - others can
give a deeper / more nuanced answer.


Look at permissions at all levels:

$ lsattr -d ~/.ssh/;echo;ls -dl ~/.ssh/;echo;getfacl ~/.ssh/;\
    icacls `cygpath -m ~/.ssh`
 /home/BWI/.ssh/

drwx-- 1 $USER None 0 Mar  8  2023 /home/$USER/.ssh/

# file: /home/$USER/.ssh/
# owner: $USER
# group: None
user::rwx
group::---
other::---
default:user::rwx
default:group::---
default:other::---

.../.ssh/ $HOST\$USER:(F)
  $HOST\None:(Rc,S,RA)
  Everyone:(Rc,S,RA)
  CREATOR OWN

Re: MULTIPLE VULNERABILITY REPORT: Multiple DLL Hijacking Vulnerability in CygWin setup-x86_64.exe

2024-02-06 Thread Kaz Kylheku via Cygwin
On 2024-02-04 21:22, Suman Chakraborty via Cygwin wrote: 
> 1. Executive Summary:
> 
> The vulnerability pertains to not finding
> the profapi.dll, CFGMGR32.dll, edputil.dll,  urlmon.dll, SspiCli.dll,
> Wldp.dll, MPR.dll, ServicingCommon.dll, TextShaping.dll, CRYPTBASE.DLL,
> PROPSYS.dll and insecure loading of dynamic link libraries (DLLs),
> specifically profapi.dll. If exploited, this vulnerability could allow an
> attacker to execute arbitrary code on a victim's machine, potentially
> leading to data breaches, system compromise, and other malicious activities.

By what means is setup.exe probing these DLLs?

I don't see any references to profapi.dll in its source tree
(git grep -i profapi turns up nothing).

If these DLL's being missing doesn't stop the program from running,
doesn't that mean it's just probing for them with LoadLibrary or
LoadLibraryEx explicitly, and then handling the failure gracefully?

Setup itself doesn't use LoadLibrary or LoadLibraryEx.

The MinGW toolchain must be introducing that somehow?

It is curious.

-- 
Problem reports:  https://cygwin.com/problems.html
FAQ:  https://cygwin.com/faq/
Documentation:https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple


Re: cygsshd fails due to bad ownership or modes of /cygdrive/c/Users

2024-02-06 Thread Brian Inglis via Cygwin

On 2024-02-05 18:36, Eliot Moss via Cygwin wrote:

On 2/5/2024 8:28 PM, Frank-Ulrich Sommer via Cygwin wrote:

On 05.02.2024 00:53, Frank-Ulrich Sommer via Cygwin wrote:
I'm trying to run cygsshd on my PC with Windows 11 and connect from a linux 
machine. I have added the public key to 
/cygdrive/c/Users/xxx/.ssh/authorized_keys and created a symbolic link from  
/cygdrive/c/Users/xxx/.ssh to /home/xxx/.ssh. As usual I checked the access 
rights and mode of the .ssh directory (700 and belongs to user xxx) and the 
authorized_keys file (600 and also belongs to user xxx) and also of the home 
directory (had to change ownership).


Change the symlink from Cygwin home to your home, as symlinks have a+rwx perms, 
so you can not use one for .ssh:


$ ln -sv `cygpath -aU "C:/Users/$USER"` /home/


Now I get the following strange messages:
[...]
Feb  5 00:35:50 X sshd: PID 2798: debug1: temporarily_use_uid: 
197609/197121 (e=18/18)
Feb  5 00:35:50 X sshd: PID 2798: debug1: trying public key file 
/home/xxx/.ssh/authorized_keys

Feb  5 00:35:50 X sshd: PID 2798: debug1: fd 5 clearing O_NONBLOCK
Feb  5 00:35:50 X sshd: PID 2798: Authentication refused: bad ownership 
or modes for directory /cygdrive/c/Users

Feb  5 00:35:50 X sshd: PID 2798: debug1: restore_uid: 18/18
[...]
Why is cygsshd complaining about the Windows "Users" directory and not about 
the directory of user xxx (/cygdrive/c/Users/xxx)? And how can I solve this?


Looking at the OpenSSH source code (on Github, not from Cygwin) I found a 
function "safe_path" that checks that the ownership and access modes for all 
path components are correct.  This relies on "platform_sys_dir_uid" which 
checks if a UID may own a system directory. The code checks for UID zero and 
might also accept an OS specific second value (PLATFORM_SYS_DIR_UID) but for 
Cygwin this seems not to be set. But I don't know where to find the source 
code for the exact version that is used in Cygwin and I'm unsure about build 
settings.


Run Cygwin setup and select package openssh Source checkbox to download the 
source package, or go to your Cygwin upstream mirror and download the source 
tarball shown in setup.ini prefixed with your nearest Cygwin mirror site e.g.


https://ftp.fau.de/cygwin/x86_64/release/openssh/openssh-9.6p1-1-src.tar.xz

Build settings are in the Cygwin package build control script definitions file 
openssh.cygport in the source tarball or build repo:


https://cygwin.com/cgit/cygwin-packages/openssh/tree/openssh.cygport

...
--disable-strip
   --with-kerberos5=/usr
   --libexecdir=/usr/sbin
   --with-xauth=/usr/bin/xauth
   --with-libedit
   --with-security-key-builtin


A comment defines this a safe path as follows:
"This is defined as all components of the path to the file must be owned by 
either the owner of the file or root and no directories must be group or world 
writable."


The "Users" directory is owned by "SYSTEM" (numeric: 18 according to stat) and 
only writable by Administrators and SYSTEM. The mode cygwin shows for 
/cygdrive/c/Users is 0750 which should be OK.


So my question is: are "Administrators" and "SYSTEM" different users and does 
cygsshd accept SYSTEM (numeric 18) as a valid user who may own system 
directories? If the numeric ID is really 18 I can't see how this check can 
succeed but I'm not sure the code used in Cygwin is the same.


$ id SYSTEM
uid=18(SYSTEM) gid=18(SYSTEM) groups=544(Administrators),18(SYSTEM)


Administrators and SYSTEM are not the same.  And neither is exactly equivalent
to the concept of root in POSIX.  SYSTEM (in my experience) is used for things
like backup tools that needs access to almost every file.  Administrators is for
system administration.  I don't have deep knowledge of all of this - others can
give a deeper / more nuanced answer.


Look at permissions at all levels:

$ lsattr -d ~/.ssh/;echo;ls -dl ~/.ssh/;echo;getfacl ~/.ssh/;\
icacls `cygpath -m ~/.ssh`
 /home/BWI/.ssh/

drwx-- 1 $USER None 0 Mar  8  2023 /home/$USER/.ssh/

# file: /home/$USER/.ssh/
# owner: $USER
# group: None
user::rwx
group::---
other::---
default:user::rwx
default:group::---
default:other::---

.../.ssh/ $HOST\$USER:(F)
  $HOST\None:(Rc,S,RA)
  Everyone:(Rc,S,RA)
  CREATOR OWNER:(OI)(CI)(IO)(F)
  CREATOR GROUP:(OI)(CI)(IO)(Rc,S,RA)
  Everyone:(OI)(CI)(IO)(Rc,S,RA)

Successfully processed 1 files; Failed processing 0 files

Try:

# add perm query cmds for info before and after changes
$ chmod -c u+rwx,go-rwx ~/.ssh/
$ setfacl -b~/.ssh/
$ chmod -c u+rwx,go-rwx ~/.ssh/ # same as before

then ls -l ~/.ssh/ and ensure that:

- non-key ssh files ... haveu+rw-x,go-rwx   perms,
- private key files id_...  haveu+r-wx,go-rwx   perms, and
- public key files  id_*.pubhavea+r-wx  

Cygwin sqlite locking debug options still available?

2024-02-06 Thread Martin Wege via Cygwin
Hello!

Is the debug mode for sqlite locking mode as described in
https://cygwin.cygwin.narkive.com/nkjMGQga/test-sqlite3-3-7-17-1-1-7-19-locking-feature
soehow still available?

We sometimes get sqlite locking errors, and like to investigate what
and why this fails

Thanks,
Martin

-- 
Problem reports:  https://cygwin.com/problems.html
FAQ:  https://cygwin.com/faq/
Documentation:https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple