lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Thu, 25 Jan 2024 08:41:32 +0100
From: Alexandre Julliard <julliard@...ehq.org>
To: Elizabeth Figura <zfigura@...eweavers.com>
Cc: Andy Lutomirski <luto@...nel.org>,  Arnd Bergmann <arnd@...db.de>,  Greg
 Kroah-Hartman <gregkh@...uxfoundation.org>,  linux-kernel@...r.kernel.org,
  linux-api@...r.kernel.org,  wine-devel@...ehq.org,  André
 Almeida
 <andrealmeid@...lia.com>,  Wolfram Sang <wsa@...nel.org>,  Arkadiusz Hiler
 <ahiler@...eweavers.com>,  Peter Zijlstra <peterz@...radead.org>
Subject: Re: [RFC PATCH 1/9] ntsync: Introduce the ntsync driver and
 character device.

Elizabeth Figura <zfigura@...eweavers.com> writes:

> On Wednesday, 24 January 2024 15:26:15 CST Andy Lutomirski wrote:
>> On Tue, Jan 23, 2024 at 4:59 PM Elizabeth Figura
>> <zfigura@...eweavers.com> wrote:
>> >
>> > ntsync uses a misc device as the simplest and least intrusive uAPI interface.
>> >
>> > Each file description on the device represents an isolated NT instance, intended
>> > to correspond to a single NT virtual machine.
>> 
>> If I understand this text right, and if I understood the code right,
>> you're saying that each open instance of the device represents an
>> entire universe of NT synchronization objects, and no security or
>> isolation is possible between those objects.  For single-process use,
>> this seems fine.  But fork() will be a bit odd (although NT doesn't
>> really believe in fork, so maybe this is fine).
>> 
>> Except that NT has *named* semaphores and such.  And I'm pretty sure
>> I've written GUI programs that use named synchronization objects (IIRC
>> they were events, and this was a *very* common pattern, regularly
>> discussed in MSDN, usenet, etc) to detect whether another instance of
>> the program is running.  And this all works on real Windows because
>> sessions have sufficiently separated namespaces, and the security all
>> works out about as any other security on Windows, etc.  But
>> implementing *that* on top of this
>> file-description-plus-integer-equals-object will be fundamentally
>> quite subject to one buggy program completely clobbering someone
>> else's state.
>> 
>> Would it make sense and scale appropriately for an NT synchronization
>> *object* to be a Linux open file description?  Then SCM_RIGHTS could
>> pass them around, an RPC server could manage *named* objects, and
>> they'd generally work just like other "Object Manager" objects like,
>> say, files.
>
> It's a sensible concern. I think when I discussed this with Alexandre
> Julliard (the Wine maintainer, CC'd) the conclusion was this wasn't
> something we were concerned about.
>
> While the current model *does* allow for processes to arbitrarily mess
> with each other, accidentally or not, I think we're not concerned with
> the scope of that than we are about implementing a whole scheduler in
> user space.

I may have misunderstood something in that dicussion then, because it
would definitely be a concern. It's OK for a process to be able to mess
up the state of any object that it has an NT handle to, but it shouldn't
be possible to mess up the state of unrelated objects in other processes
simply by passing the wrong integer id.

The concern is not so much about a malicious process going out of its
way to corrupt others, because it could do that through the NT API just
as well. But if a wayward pointer corrupts the client-side handle cache,
that shouldn't take down the entire session.

-- 
Alexandre Julliard
julliard@...ehq.org

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ