Skip to content
Open
1 change: 1 addition & 0 deletions changes/43319-fix-scep-pkiop-url-query-plus-sign
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- Fixed SCEP PKIOperation handler incorrectly decoding base64 `+` characters as spaces.
12 changes: 4 additions & 8 deletions server/mdm/scep/server/transport.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"io"
"log/slog"
"net/http"
"net/url"
"strings"

"github.com/fleetdm/fleet/v4/server/mdm/scep/kitlogadapter"
"github.com/go-kit/kit/transport"
Expand Down Expand Up @@ -179,14 +179,10 @@ func message(r *http.Request) ([]byte, error) {
return nil, &BadRequestError{Message: "missing PKIOperation message"}
}

msg2, err := url.PathUnescape(msg)
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PathUnescape() removed because Query() already provides unescaped values.

msg = strings.ReplaceAll(msg, " ", "+")
decoded, err := base64.StdEncoding.DecodeString(msg)
if err != nil {
return nil, &BadRequestError{Message: fmt.Sprintf("invalid PKIOperation message: %s", msg)}
}

decoded, err := base64.StdEncoding.DecodeString(msg2)
if err != nil {
return nil, &BadRequestError{Message: fmt.Sprintf("failed to base64 decode message: %s: %s", err.Error(), msg2)}
return nil, &BadRequestError{Message: fmt.Sprintf("failed to base64 decode message: %s: %s", err.Error(), msg)}
}

return decoded, nil
Expand Down
Loading