Closed Bug 1333165 Opened 9 years ago Closed 6 years ago

Allow DLL and PDB download for privileged users

Categories

(Tecken :: Upload, task)

task
Not set
normal

Tracking

(Not tracked)

RESOLVED WONTFIX

People

(Reporter: benjamin, Unassigned)

Details

Adobe uploads Flash player symbols and binaries, and in particular the DLLs and PDB files associated with Flash releases. It would be very helpful for certain privileged users to be able to download these PDB files for local debugging purposes. Possible options, from most-great to minimally-sufficient: * provide a symbol server URL that we can use with an API token to automatically download symbols * provide a link from the "modules" tab of an individual report to download the binary and PDB for that module, if it's available: ** for example, https://crash-stats.mozilla.com/report/index/a81d373c-5962-47be-9c6e-7621d2170123#tab-modules "NPSWF32_24_0_0_194.dll" links to the public symbols, but this is a private symbol. * provide a separate API where you submit a debug name and debug ID and get back the matching binary and PDB file. e.g. for the crash above, I'd submit some combination of "NPSWF32_24_0_0_194.dll | 24.0.0.194 | 4EB3710233544687A9723893CD5DBC491 | NPSWF32.pdb" and be able to download the DLL and PDB file.
(In reply to Benjamin Smedberg [:bsmedberg] from comment #0) > * provide a link from the "modules" tab of an individual report to download > the binary and PDB for that module, if it's available: > ** for example, > https://crash-stats.mozilla.com/report/index/a81d373c-5962-47be-9c6e- > 7621d2170123#tab-modules "NPSWF32_24_0_0_194.dll" links to the public > symbols, but this is a private symbol. Yeah, I totally punted on this when I implemented it: https://github.com/luser/rust-makecab/commit/d2bc6797648b7a834782714a55d339d2fd4e58c8 Since we only have two symbol buckets (public and private) the links are only ever wrong for locally-cached symbols that were originally from the private bucket. Even if we fixed that to work it still wouldn't be useful, since the private bucket doesn't have public access on by design.
I've been thinking about some big overhauling changes to accessing symbols. It's going to be similar to the symbols upload as part of Socorrro but more dedicated and easier to add advanced features. At the moment the the public symbols store is exposed via its S3 URL. We could make it so that the private (or some super private ones like "private-mcafee" hypothetically) could be masked by a web service that checks API tokens. It'd then instead of exposing that private S3 bucket, we'd "channel" them. That would definitely solve your "most-great" feature request of "provide a symbol server URL that we can use with an API token to automatically download symbols"
Tecken now already has the ability to proxy private symbols but obviously we don't want to add a private bucket to the list of buckets that you can download. However, Tecken also has API tokens and permissions and stuff so we could simply add some code in the runtime like this (pseudo'esque code): def download_symbol(request, symbol, debug_id, filename): symbols_sources = settings.SYMBOL_URLS if request.user.has_perm('download_private_symbols'): symbol_sources.extend(settings.PRIVATE_SYMBOL_URLS) found = find(symbol_sources, symbol, debug_id, filename) if found: return redirect(found.presigned_url()) else: raise Http404() The above is largely loud thoughts but my question to you Ted and Benjamin; Is it enough to just have a single permission (technically users belong to groups, and groups have the permissions) that enables users to get access to all private symbol sources/buckets? Or, does it need more fine-tuning, like a permission/group *per* private source/bucket? In particular, isn't it true that we might soon have some Intel symbols (MacAfee) that are even more sensitive than things like the Adobe Flash ones. After all, I can make 1 permission group per private symbols bucket.
Flags: needinfo?(ted)
Flags: needinfo?(benjamin)
I don't know anything about Intel symbols. I would have said that a single permission is fine, but I don't know the details.
Flags: needinfo?(benjamin)
(In reply to Benjamin Smedberg [:bsmedberg] from comment #4) > I don't know anything about Intel symbols. I would have said that a single > permission is fine, but I don't know the details. The context is this beast/mess of a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1293722 Ted's comment was: "I don't believe we have any way of storing them that would both keep them private and allow us to make use of them without making copies." I.e. even if we make it reachable via Tecken, for special snowflake superusers, it would fundamentally involves the bytes being copied from S3 down to that client. We don't have a server that can engage these symbols and keep the symbolication private. Socorro's symbolication is always quite public. We could do it with Tecken's Symbolication (although today only built for crash pings) because Tecken doesn't store the symbolication result anywhere. How about we keep it simple and ignore this Intel McAfee DLL stuff entirely for now and we can revisit this logic in the future.
I don't think we should complicate things beyond public/private. You can have a single permission for access to private symbols. We should only allow partners to upload symbols if they are comfortable with us using their symbols in this manner.
Flags: needinfo?(ted)
Tecken is live now. It doesn't have the ability to download symbols by private buckets yet but it would be quite trivial to add. The list of buckets it proxies symbol downloads for is hardcoded but if the client could pass a API Token header, we can turn that into a user and we can match the user against the setting we have that specifies which bucket these people should download from. Coding it wouldn't be hard but we'd need to do it gently so we get it right from a security perspective. Coupla questions: * How needed is this feature still? I.e. clients being able to DOWNLOAD private symbols. * Do we want to advance the security model first? At the moment we maintain a config variable that basically maps email regexes to bucket names for uploads. We *could* move this to the superuser webapp in symbols.mozilla.org so superusers can direct specifically who can download from what specific S3 buckets.
(In reply to Peter Bengtsson [:peterbe] from comment #7) > * How needed is this feature still? I.e. clients being able to DOWNLOAD > private symbols. This is probably not high up the priority list, but I don't know who (if anyone) is stuck dealing with Flash plugin crsahes these days.
Moving Tecken service bugs to Tecken component.
Component: Symbols → Tecken Integration

Moving bugs to Tecken product.

Component: Tecken → Upload
Product: Socorro → Tecken

I'm going to close this out. If someone is interested in it, we can reopen.

Status: NEW → RESOLVED
Closed: 6 years ago
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.