Voici une solution. La position horizontale est réglée par `\hspace{-\Gm@lmargin}` avant la boîte `colorbox` et la position verticale par `\vspace{-\Gm@tmargin}`.
`\@begindvi` `\newgeometry{top=0pt,bottom=\mtbottom}`.
Le problème qui se pose ici est qu'on ne peut pas utiliser `\restoregeometry` ni explicitement par ce qu'elle cause une commande interne utilisée nouvelle page ni implicitement par la routine ce que les dimension ne sont pas sauvegardées de sortie manière globale.
Ici on a définie deux commandes qui permet de LaTeX, vidée une fois utilisée : `\global\let \@begindvi \@empty`. Elle ne change donc rien au pages suivantes.
sauvegardées les valeurs initiales des dimensions et puis les récupérées.
\documentclass{article}
\usepackage{xcolor}
\usepackage{xcolor,lipsum}
\usepackage[showframe,margin=2.5cm,top=2cm,bottom=2cm,a4paper]{geometry}
\newcommand*\mtsavedim[1]{%
\expandafter\edef\csname mt#1\endcsname{\expandafter\the\csname#1\endcsname}}
\newcommand*\mtrestoredim[1]{%
\global\csname#1\endcsname=\csname mt#1\endcsname}
\makeatletter
\renewcommand\maketitle{%
\mtsavedim{topmargin}%
\mtsavedim{headheight}%
\mtsavedim{headsep}%
\mtsavedim{textheight}%
\edef\mtbottom{\Gm@bmargin}%
\newgeometry{top=0pt,bottom=\mtbottom}
\begingroup
\fboxsep=0pt\fboxrule=0pt\parindent=0pt%
\hspace{-\Gm@lmargin}%
\colorbox{red!5}{%
\parbox{\paperwidth}{%
% deux options
\makebox[\paperwidth][l]{%
\hspace{\Gm@lmargin}%
%\makebox[\paperwidth][c]{%
\parbox{\textwidth}{%
\@maketitle%
\color{red}\rule{\paperwidth}{3pt}
}}
}}}
\endgroup}%
\def \@begindvi{%
\unvbox \@begindvibox
\vspace{-\Gm@tmargin}%
\global\let \@begindvi \@empty
\let\mt@outputpage\@outputpage
\def\@outputpage{%
\mt@outputpage%
\mtrestoredim{topmargin}%
\mtrestoredim{headheight}%
\mtrestoredim{headsep}%
\mtrestoredim{textheight}%
\global \@colht \textheight
}
\makeatother
\title{Titre}\author{Auteur}
\begin{document}
\begin{document}
\maketitle
\section{Intro} Texte
\lipsum[1-20]
\end{document}