Commit 71b5ab2
committed
Merge remote-tracking branch 'origin/pr/751'
* origin/pr/751:
Document the API
Disable libvirtaio debug log and add allow revert
Optionally log API calls made by dom0
Add custom exception to assignment mode and backup
Fix assignment mode docstring
Do not raise absent object before admin-permission
Log and return prohibitions and client errors
Skip logging unsanitized value
Clean return logic on transport success or failure
Prohibit empty tags and labels
Use correct internal exception
Pull request description:
The exceptions ProtocolError and PermissionDenied are both raised by qubesd to indicate various problems with requests. However, both cause clients to print the extremely unhelpful "Got empty response from qubesd" message.
ProtocolError must be used only for client *programming* errors (bugs), not for problems that the client could not have detected before making the request.
PermissionDenied must be used only for service authorization denials.
Therefore, a API handler can be arranged as:
- Validation: ProtocolError otherwise
- fire_event_for_permission(): PermissionDenied if unauthorized
- Action
Ideally, validation that may leak existence of a system property should be done after asking for administrative permission, but then it would not be possible to pass only safe values to "admin-api:" events.
If we are already leaking existence of a property, it makes sense to provide a useful exception class for it.
Fixes: QubesOS/qubes-issues#10345
Fixes: QubesOS/qubes-issues#10689
---
It is a draft, just posting here for CI. It is more like an idea than a finished version. Logging messages should be okay now, it is only from trusted input.
From some open TODOs:
```
% rg 'TODO: ben'
qubes/api/admin.py
460: # TODO: ben: info-leak: revision existence
522: # TODO: ben: info-leak: pool existence
525: # TODO: ben: info-leak: volume existence
799: # TODO: ben: info-leak: pool existence
841: # TODO: ben: info-leak: pool existence
849: # TODO: ben: dangerous logging any ASCII value?
949: # TODO: ben: info-leak: label existence
963: # TODO: ben: info-leak: label existence
975: # TODO: ben: info-leak: label existence
1008: # TODO: ben: info-leak: label existence
1309: # TODO: ben: info-leak: template existence
1341: # TODO: ben: info-leak: label existence
1392: # TODO: ben: info-disclosure: learns if qube exists
```
It seems that most checks that are done before `admin-permission` events may leak some data but not sure of its sensitiveness.
- `revision` is a date
- `volumes` are always the same
- `pool` and `labels` have a default that most people use
- `template` and `qube` existence, not so nice
But without these checks, there is no good error message...18 files changed
Lines changed: 1858 additions & 511 deletions
File tree
- doc
- qubes-rpc-policy
- qubes
- api
- tests
- vm
- tools
- vm
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
| 46 | + | |
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
| 46 | + | |
47 | 47 | | |
48 | | - | |
| 48 | + | |
49 | 49 | | |
50 | | - | |
| 50 | + | |
51 | 51 | | |
52 | | - | |
53 | | - | |
| 52 | + | |
| 53 | + | |
54 | 54 | | |
55 | 55 | | |
56 | | - | |
57 | | - | |
58 | | - | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
59 | 59 | | |
60 | 60 | | |
61 | 61 | | |
| |||
0 commit comments