On 8 June 2016 at 17:17, Ansis Atteka <ansisatt...@gmail.com> wrote:

>
>
> On 8 June 2016 at 16:45, Ansis Atteka <ansisatt...@gmail.com> wrote:
>
>>
>>
>> On 8 June 2016 at 14:02, Ben Pfaff <b...@ovn.org> wrote:
>>
>>> On Thu, Jun 02, 2016 at 07:47:33PM -0700, Ansis Atteka wrote:
>>> > Before this patch OVS refused to connect to a local controller that
>>> > had its Unix Domain Socket outside Open vSwitch run directory (e.g.
>>> > outside '/var/run/openvswitch/').
>>> >
>>> > After this patch this restriction imposed by Open vSwitch itself is
>>> > abandoned and OVS should be able to connect to controller's Unix Domain
>>> > Sockets anywhere under filesystem.
>>>
>>> When I run "netstat -lnx" on my laptop, I see a bunch of listening Unix
>>> domain sockets.
>>>
>>
>>> Some of these listening sockets are security sensitive, such as SSH
>>> agents, so it wouldn't be good to have a remote manager be able to point
>>> OVS to them: what if a clever person could figure out how to send
>>> arbitrary data to them (maybe in a packet-in message somehow?) via
>>> OpenFlow.  Other examples are dbus and udev sockets.
>>>
>>> That's my main worry here.
>>>
>>
>> Ok, I see your concern now. At least with SELinux enabled such attacks
>> would fail on default Fedora, RHEL and CentOS:
>>
>> [root@localhost ovs]# tail /var/log/openvswitch/ovs-vswitchd.log
>> 2016-06-08T22:51:48.215Z|00033|connmgr|INFO|brz: added service controller
>> "punix://var/run/openvswitch/brz.mgmt"
>> 2016-06-08T22:51:48.215Z|00034|bridge|INFO|bridge brs: using datapath ID
>> 0000e6d0bb7b3047
>> 2016-06-08T22:51:48.215Z|00035|connmgr|INFO|brs: added service controller
>> "punix://var/run/openvswitch/brs.mgmt"
>> 2016-06-08T22:51:48.220Z|00036|bridge|INFO|ovs-vswitchd (Open vSwitch)
>> 2.5.90
>> 2016-06-08T22:51:48.665Z|00037|rconn|INFO|brX<->unix:/run/udev/control:
>> connecting...
>> 2016-06-08T22:51:48.665Z|00038|rconn|WARN|brX<->unix:/run/udev/control:
>> connection failed (Permission denied)
>> 2016-06-08T22:51:48.665Z|00039|rconn|INFO|brX<->unix:/run/udev/control:
>> waiting 2 seconds before reconnect
>> 2016-06-08T22:51:50.666Z|00040|rconn|INFO|brX<->unix:/run/udev/control:
>> connecting...
>> 2016-06-08T22:51:50.666Z|00041|rconn|WARN|brX<->unix:/run/udev/control:
>> connection failed (Permission denied)
>>
>> because Open vSwitch runs under openvswitch_t domain:
>>
>> system_u:system_r:openvswitch_t:s0 root  16567 16566  0 66914 36460   0
>> 15:51 ?        00:00:00 ovs-vswitchd unix:/var/run/openvswitch/db.sock
>> -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir
>> --log-file=/var/log/openvswitch/ovs-vswitchd.log
>> --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
>>
>> and OVS is unable to connect sockets other than those that have type
>> openvswitch*_t type:
>>
>> srwxr-x---. 1 root root system_u:object_r:openvswitch_var_run_t:s0 0 Jun
>>  8 15:51 /var/run/openvswitch/brT.mgmt
>>
>> For example, udev control socket and others use udev_var_run_t type:
>>
>> srw-------. 1 root root system_u:object_r:udev_var_run_t:s0 0 Jun  2
>> 15:43 /run/udev/control
>>
>>
>> So the problem my patch is trying to solve is that there could be over
>> confined processes trying
>>
> Just noticed that my sentence was abruptly cut:
>
> "So the problem my patch is trying to solve is that there could be
> over-confined processes trying to connect to OVS but they can't do that
> because /var/run/openvswitch and its contents are owned by root:root."
>
>
>>
>> Here are the options I see:
>> 1. abandon my patch and tell everyone to figure out on their own on how
>> to connect to Open vSwitch sockets under /var/run/openvswitch/ directory
>> (e.g. by changing group of /var/run/openvswitch or by opening socket while
>> their processes are running under root user and only after that they change
>> the user).
>> 2. abandon my patch, but implement something similar to Aaron's DPDK
>> socket chown()/chmod() patch and tell others to use it.
>> 3. abandon my patch, but implement some kind of access control inside
>> OVSDB. For example, the roles could be "local admin" and "remote
>> controller". "remote controller" should have limited access to certain
>> database files. This is non-
>>
> s/database files/database tables or columns/
>
>> trivial, but may be something to consider long-term because OVSDB
>> currently contains a lot of things to which access is granted on
>> all-or-nothing basis.
>> 4. move forward with my patch, but allow to dynamically specify
>> whitelist. Obviously this whitelist must not be configurable through OVSDB
>> because then it loses its purpose.
>> 5. move forward with my patch, but use Mandatory Access Control to
>> specify whitelist of paths to which OVS can connect to (this makes
>> assumption that MAC - SELinux or AppArmor - is up and running).
>>
>> Unfortunately there is no silver bullet for this problem.
>>
>> Actually, there may be a 6th solution:
> 6. move forward with my patch and hope that OpenFlow handshake would make
> the other side to close the socket early. This is still not that good as
> proper access control.
>


This patch can be abandoned. I sent a new one with slightly different
approach: http://openvswitch.org/pipermail/dev/2016-June/073211.html

Basically it leaves the default behavior unchanged, but if one is running
under SELinux or Apparmor, then he can disable the Self-confinement feature
in OVS through /etc/default/openvswitch file.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to