On Jan 10 13:52, Kaz Kylheku via Cygwin wrote:
> On 2025-01-09 23:52, Marco Atzeri wrote:
> > On 10/01/2025 08:33, Andrey Repin via Cygwin wrote:
> >> Greetings, Kaz Kylheku!
> >>
> >>> Hi all,
> >>
> >>> I'm reading an article on attacks that are evidently possible against 
> >>> some Windows
> >>> programs in the area of command line parsing. See below.
> >>
> >>> Does the Cygwin run-time rely on GetCommandLineA to get the char-based 
> >>> command
> >>> line that is parsed into argv[]?
> >>
> >> You can answer this question yourself. The code is open.
> > 
> > Specifically on https://cygwin.com/git/newlib-cygwin.git
> > 
> > /pub/Cygwin/git/newlib-cygwin
> > $ grep -rH GetCommandLineA .
> > ./winsup/CVSChangeLogs.old/cygwin/ChangeLog-2013: (cygwin_GetCommandLineA): 
> > Ditto.
> > ./winsup/cygwin/cygwin.din:GetCommandLineA@0 = cygwin_GetCommandLineA@0 
> > NOSIGFE
> > ./winsup/cygwin/include/cygwin/version.h:  268: Export GetCommandLineA, 
> > GetCommandLineW
> > ./winsup/cygwin/kernel32.cc:/* Cygwin replacement for GetCommandLineA. 
> > Returns a concatenated string
> > ./winsup/cygwin/kernel32.cc:cygwin_GetCommandLineA (void)
> 
> I see that the kernel32.cc function uses RtlUnicodeStringtoAnsiString.
> 
> The article I linked to mentions this specific function. The function does the
> "BestFit" thing, converting Unicode characters to ASCII pseudo-equivalents.
> 
> If Cygwin relies on this function for converting the process command line
> into main() arguments, it is likely susceptible to argument injection.

Yeah, but it doesn't.  This is just a wrapper function for external
apps.  See function dll_crt0_1() in dcrt0.cc for the real deal.


Corinna

-- 
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

Reply via email to