mirror of
https://github.com/safing/portmaster
synced 2025-09-01 18:19:12 +00:00
Resolve to real file paths before checking path based API access
This commit is contained in:
parent
42eb3a1d0e
commit
9a39caf22b
1 changed files with 11 additions and 7 deletions
|
@ -22,11 +22,7 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
deniedMsgUnidentified = `%wFailed to identify the requesting process.
|
||||
You can enable the Development Mode to disable API authentication for development purposes.
|
||||
|
||||
If you are seeing this message in the Portmaster App, please restart the app or right-click and select "Reload".
|
||||
In the future, this issue will be remediated automatically.`
|
||||
deniedMsgUnidentified = `%wFailed to identify the requesting process. Reload to try again.`
|
||||
|
||||
deniedMsgSystem = `%wSystem access to the Portmaster API is not permitted.
|
||||
You can enable the Development Mode to disable API authentication for development purposes.`
|
||||
|
@ -136,6 +132,12 @@ func authenticateAPIRequest(ctx context.Context, pktInfo *packet.Info) (retry bo
|
|||
if authenticatedPath == "" {
|
||||
return false, fmt.Errorf(deniedMsgMisconfigured, api.ErrAPIAccessDeniedMessage) //nolint:stylecheck // message for user
|
||||
}
|
||||
// Get real path.
|
||||
authenticatedPath, err = filepath.EvalSymlinks(authenticatedPath)
|
||||
if err != nil {
|
||||
return false, fmt.Errorf(deniedMsgUnidentified, api.ErrAPIAccessDeniedMessage) //nolint:stylecheck // message for user
|
||||
}
|
||||
// Add filepath separator to confine to directory.
|
||||
authenticatedPath += string(filepath.Separator)
|
||||
|
||||
// Get process of request.
|
||||
|
@ -157,8 +159,10 @@ func authenticateAPIRequest(ctx context.Context, pktInfo *packet.Info) (retry bo
|
|||
break checkLevelsLoop
|
||||
default: // normal process
|
||||
// Check if the requesting process is in database root / updates dir.
|
||||
if strings.HasPrefix(proc.Path, authenticatedPath) {
|
||||
return false, nil
|
||||
if realPath, err := filepath.EvalSymlinks(proc.Path); err == nil {
|
||||
if strings.HasPrefix(realPath, authenticatedPath) {
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue